我想知道 IO Monad 和 Reader monad 之间有什么关系吗?
Reader monad 中的 Environment 可以产生影响吗?如果是这样,ZIO 或 Cats IO,scalaz-effects 如何处理 Reader Monad 原则?
我想知道 IO Monad 和 Reader monad 之间有什么关系吗?
Reader monad 中的 Environment 可以产生影响吗?如果是这样,ZIO 或 Cats IO,scalaz-effects 如何处理 Reader Monad 原则?
a 中的环境Reader
通常不是效果 - 它不需要。
要理解为什么,首先需要了解Reader
monad 是对函数的抽象A => B
,其中A
是某种环境。
一般来说,如果你有一个效果F[A]
,你总是可以map
使用Reader
's apply
- 函数的值,对吧?
对于cats-effect
, aReader
被简单地定义为 a Kleisli
(对函数的抽象A => F[B]
),F[_]
并被定义为type F[A] = A
。Kleisli
提供您在组合方面所需的一切,这就是为什么Reader
s 被定义为Kleisli
s 的子集的原因。你可以在这里阅读更多关于它的信息。
因为ZIO
,事情看起来有点不同。
看一下定义:ZIO[R, E, A]
. 这三个类型参数描述了环境(R
)、错误类型(E
)和结果类型(A
)。
这意味着它ZIO
已经是IO
和Reader
monad 的组合。在ZIO
中,您可以使用access
- 功能访问环境。