我想知道IO Monad和Reader monad之间有什么关系吗?
Reader monad中的环境会产生影响吗?如果是这样,ZIO或Cats IO,scalaz效果如何处理Reader Monad原理?
答案 0 :(得分:2)
Reader
中的环境通常不会产生影响-不必如此。
要了解原因,首先需要了解Reader
monad是对功能A => B
的抽象,其中A
是某种环境。
通常,如果您有F[A]
的效果,则可以始终使用map
的{{1}}-函数对值进行Reader
,对吗?
对于apply
,cats-effect
仅定义为Reader
(对功能Kleisli
的抽象),其中A => F[B]
被定义为{{1} }。 F[_]
提供了组成方面所需的一切,这就是为什么type F[A] = A
被定义为Kleisli
的子集的原因。您可以详细了解here。
对于Reader
,情况看起来有些不同。
看看定义:Kleisli
。这三个类型参数描述了环境(ZIO
),错误类型(ZIO[R, E, A]
)和结果类型(R
)。
这意味着E
已经是A
和ZIO
单子的组合。
在IO
中,您可以使用Reader
-函数访问环境。