小编金允雄*_*ver的帖子

实现读者monad(来自现实世界haskell)

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.

提前致谢.

monads haskell reader-monad

1
推荐指数
1
解决办法
309
查看次数

标签 统计

haskell ×1

monads ×1

reader-monad ×1