Control.Monad.Reader に Reader モナドと MonadReader モナドがあるのはなぜですか? パッケージのドキュメントは Reader モナドについて述べた後、説明なしで MonadReader ドキュメントを直接起動します。これらのモナドの違いは何ですか? これらの参照ページを読むと、私は混乱するばかりです。興味深いことに、Haskell wikibook の Reader モナド ページはまだ作成されていません!
1 に答える
15
MonadReader
モナドはありません。これはモナドのクラス、つまりaとして使用できるモナドのクラスです (一般に、それらはどこかReader
に a を持つモナド変換子スタックとして定義されているため)。ReaderT
そう、
Reader
は、自明な同一性モナドにのみ適用されているため、リーダーとしてのみ機能する特定のモナドです。ReaderT
type Reader r = ReaderT r Identity
したがって、明らかに のインスタンスですが
MonadReader
、他には何もしません。MonadReader
is は、ある環境から読み取ることができるすべてのモナドのクラスです。繰り返しますが、これにはReader
それ自体が含まれますが、MaybeT (ReaderT Int (ListT IO))
.
于 2016-09-07T09:36:38.913 に答える