我想知道IO Monad和Reader monad之间有什么关系吗?
Reader monad中的环境会产生影响吗?如果是这样,ZIO或Cats IO,scalaz-effects如何处理Reader Monad原则?
发布于 2019-07-09 18:27:08
Reader中的环境通常不会产生影响--它不需要产生影响。
要理解其中的原因,您首先需要了解Reader monad是functions A => B之上的抽象,其中A是某种环境。
一般来说,如果你有一个效果函数,你总是可以使用Reader的apply - F[A]来map这个值,对吧?
对于cats-effect,Reader被简单地定义为Kleisli (函数A => F[B]上的抽象),F[_]被定义为type F[A] = A。Kleisli在组合方面提供了你需要的一切,这就是为什么Reader被定义为Kleisli的一个子集。你可以在here上阅读更多关于它的内容。
对于ZIO来说,事情看起来有点不同。
看看它的定义:ZIO[R, E, A]。这三个类型参数描述环境(R)、错误类型(E)和结果类型(A)。
这意味着ZIO已经是IO和Reader monads的组合。在ZIO中,您可以使用access- function访问环境。
https://stackoverflow.com/questions/56877750
复制相似问题