1

我想知道 IO Monad 和 Reader monad 之间有什么关系吗?

Reader monad 中的 Environment 可以产生影响吗?如果是这样,ZIO 或 Cats IO,scalaz-effects 如何处理 Reader Monad 原则?

4

1 回答 1

5

a 中的环境Reader通常不是效果 - 它不需要。

要理解为什么,首先需要了解Readermonad 是对函数的抽象A => B,其中A是某种环境。

一般来说,如果你有一个效果F[A],你总是可以map使用Reader's apply- 函数的值,对吧?

对于cats-effect, aReader被简单地定义为 a Kleisli(对函数的抽象A => F[B]),F[_]并被定义为type F[A] = AKleisli提供您在组合方面所需的一切,这就是为什么Readers 被定义为Kleislis 的子集的原因。你可以在这里阅读更多关于它的信息。

因为ZIO,事情看起来有点不同。

看一下定义:ZIO[R, E, A]. 这三个类型参数描述了环境(R)、错误类型(E)和结果类型(A)。

这意味着它ZIO已经是IOReadermonad 的组合。在ZIO中,您可以使用access- 功能访问环境。

于 2019-07-09T10:27:08.010 回答