Identity
のモナドトランスタイプを定義すると、Show
インスタンスを導出できます。MaybeTのShowインスタンスを派生させることができないのはなぜですか?
newtype IdentityT f a =
IdentityT { runIdentityT :: f a }
deriving (Show)
は
instance Show (f a) => Show (IdentityT f a)
を導出します。しかし、私はMaybe
newtype MaybeT m a =
MaybeT { runMaybeT :: m (Maybe a) }
deriving (Show)
のためのモナド変換子のタイプを定義する場合、私はので、エラー
• No instance for (Show (m (Maybe a)))
arising from the first field of ‘MaybeT’ (type ‘m (Maybe a)’)
を取得します0がShow
インスタンスを持って、私はそれが仕事と導くために期待する
instance Show (m (Maybe a)) => Show (MaybeT m a)
なぜできないのですか?
しかし、その2番目の提案は、 'UndecidableInstances'を有効にするためには問題ありません。 – dfeuer
私は 'UndecidableInstances'を使ってコンパイラにインスタンスを派生させることができますが、' MaybeT'型では 'IdentityT'型をうまく処理できる間にそれを派生させることができません。 Ex。私はそれが 'MaybeT [Just1]'を拡張子なしで表示できると期待しています – robertjlooby