newtype Reader e a = R { runReader :: e -> a }
instance Monad (Reader e) where
return a = R $ \_ -> a
m >>= k = R $ \r -> runReader (k (runReader m r)) r
Run Code Online (Sandbox Code Playgroud)
我很难理解这两个片段.我可以说第一个是读者的记录语法描述,它具有从e到a的函数runReader,但第二个让我困惑.
通过将m与k绑定,它实际上是在尝试创建一个新的Reader,但是如何实现
runReader (k (runReader m r)) r
Run Code Online (Sandbox Code Playgroud)
锻炼?我认为runReader只接受一个参数,但现在它似乎正在接受两个,一个是k(runReader mr)而另一个是r.
提前致谢.