[英]Monad Transformers in Scala
我一直在尝试简单的Monad变形金刚,我的理解涉及M[F[A]]
,其中M
和F
是monad。 如果S
是不同的monad,如何使M[F[A]]
和M[S[A]]
在for comp中一起工作?
例如:
val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...
a
需要ListT[Future, Int]
并且b
需要OptionT[Future, Int]
但这些不构成,我是否需要使用另一个变换器? 这取决于我在for comp中使用它们的顺序吗?
Monad变形金刚帮助你编写两个F[G[X]]
类型的值。
换句话说,monad变换器使用F[G[X]]
因为它们利用了如果Monad[G]
存在则你知道如何编写两个G[X]
的事实。
现在,在F[G[X]
和F[H[X]]
,即使你声明G
和H
有Monad
实例,你仍然没有一般的方法来组合它们。
我害怕编写F[G[X]]
而F[H[X]]
没有使用monad变换器的一般解法。
您可以尝试使用monad变换器堆栈ListT[OptionT[Future, Int]]
,它同时组合所有效果。 您可以将a
和b
提升为该monad变换器堆栈的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.