【发布时间】:2016-02-18 02:06:26
【问题描述】:
我很难掌握 Monad Reader 函数的以下类型类约束,它接收多个变量,
local :: MonadReader r m => (r -> r) -> m a -> m a
如何正确理解类型类约束?哪个是类型构造函数,r 或 m 或两者兼而有之? (从m a 部分它建议类型构造函数是m)。
与例如绑定函数相比,类型类约束只允许单个参数;
(>>=) :: Monad m => m a -> (a -> m b) -> m b
与上面的本地函数不同,很明显并且很容易理解绑定函数的类型类约束要求类型构造函数m 是一个Monad 实例。
【问题讨论】:
-
adit.io/posts/… 对 reader monad 有很好的图解说明。