Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中的Monad变压器_Scala_Monads_Scalaz_Monad Transformers - Fatal编程技术网

Scala中的Monad变压器

Scala中的Monad变压器,scala,monads,scalaz,monad-transformers,Scala,Monads,Scalaz,Monad Transformers,我一直在尝试简单的单子变形器,在那里我可以理解M[F[A]其中M和F是单子。如果S是不同的单子,我如何使M[F[A]]和M[S[A]]在for comp中协同工作 例如: val a: Future[List[Int]] = ... val b: Future[Option[Int]] = ... a需要一个ListT[Future,Int]和b需要一个option[Future,Int]但这些都不构成,我需要使用另一个变压器吗?这取决于我在for comp中使用它们的顺序吗 Monad转换器

我一直在尝试简单的单子变形器,在那里我可以理解
M[F[A]
其中
M
F
是单子。如果
S
是不同的单子,我如何使
M[F[A]]
M[S[A]]
在for comp中协同工作

例如:

val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...

a
需要一个
ListT[Future,Int]
b
需要一个
option[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 transformer没有通用的解决方案。

您可以尝试使用monad transformer堆栈
ListT[OptionT[Future,Int]]
一次组合所有效果。您可以将
a
b
提升到该monad transformer堆栈的值中