2

私はリーダーモナドを理解しようとしていますが、このモナドで bind (>>=) が何をするのか理解できないようです。

私が分析している実装は次のとおりです。

newtype Reader e a = Reader { runReader :: (e -> a) }

instance Monad (Reader e) where 
    return a         = Reader $ \e -> a 
    (Reader r) >>= f = Reader $ \e -> runReader (f (r e)) e
  1. 私の最初の質問は、なぜ Reader が bind の左側に部分的に適用されるのですか? (Reader r)の代わりに(Reader r a)
  2. 定義のこの部分で(f (r e))何が起こっているか: 、その目的は何ですか?

助けてくれてどうもありがとう。

4

3 に答える 3