5

Control.Monad.Reader に Reader モナドと MonadReader モナドがあるのはなぜですか? パッケージのドキュメントは Reader モナドについて述べた後、説明なしで MonadReader ドキュメントを直接起動します。これらのモナドの違いは何ですか? これらの参照ページを読むと、私は混乱するばかりです。興味深いことに、Haskell wikibook の Reader モナド ページはまだ作成されていません!

4

1 に答える 1

15

MonadReaderモナドはありません。これはモナドのクラス、つまりaとして使用できるモナドのクラスです (一般に、それらはどこかReaderに a を持つモナド変換子スタックとして定義されているため)。ReaderTそう、

  • Readerは、自明な同一性モナドにのみ適用されているため、リーダーとしてのみ機能する特定のモナドです。ReaderT

    type Reader r = ReaderT r Identity
    

    したがって、明らかに のインスタンスですがMonadReader、他には何もしません。

  • MonadReaderis は、ある環境から読み取ることができるすべてのモナドのクラスです。繰り返しますが、これにはReaderそれ自体が含まれますが、MaybeT (ReaderT Int (ListT IO)).
于 2016-09-07T09:36:38.913 に答える