Real World Haskellの本のこのセクションhttp://book.realworldhaskell.org/read/monad-transformers.html#id659032MonadState
は、新しいモナド変換子を作成するときに、、MonadIO
などのインスタンスを手動で導出する必要があることを示唆しています。
しかし、私は以下を試し、それをコンパイルしました。なぜ図書館で行われないのですか?
私がMaybeT
モナド変換子を持っているとしましょう:
newtype MaybeT m a = MaybeT {
runMaybeT :: m (Maybe a)
}
instance Monad m => Monad (MaybeT m) where -- blah blah
instance MonadTrans MaybeT where
lift = MaybeT . (liftM Just)
t
それがaMonadTrans
でありm
、であることがわかったらMonad
、なぜ他のすべてをこのように自動的に導出できないのでしょうか。
instance (MonadTrans t, Monad (t m), MonadIO m) => MonadIO (t m) where
liftIO = lift . liftIO
instance (MonadTrans t, Monad (t m), MonadState s m) => MonadState s (t m) where
get = lift get
put = lift . put
著者は、新しいものごとにこれを手動で行う必要があることを意味しますか、MonadTrans
それとも私は彼を間違えますか?
どうもありがとうございます :)