繁体   English   中英

斯卡拉的Monad变形金刚

[英]Monad Transformers in Scala

我一直在尝试简单的Monad变形金刚,我的理解涉及M[F[A]] ,其中MF是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]] ,即使你声明GHMonad实例,你仍然没有一般的方法来组合它们。

我害怕编写F[G[X]]F[H[X]]没有使用monad变换器的一般解法。

您可以尝试使用monad变换器堆栈ListT[OptionT[Future, Int]] ,它同时组合所有效果。 您可以将ab提升为该monad变换器堆栈的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM