我一直在尝试使用简单的Monad变形金刚来理解涉及M[F[A]]
M
和F
是monad的M[F[A]]
。如果M[S[A]]
是不同的monad,如何让S
和val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...
在for comp中一起工作?
例如:
a
ListT[Future, Int]
需要b
而OptionT[Future, Int]
需要compile 'com.squareup.picasso:picasso:2.5.2'
,但这些不构成,我是否需要使用其他变压器?这取决于我在for comp中使用它们的顺序吗?
答案 0 :(得分:4)
Monad Transformers可帮助您编写两个read_csv
类型的值。
换句话说,monad变换器与F[G[X]]
一起使用,因为它们利用了如果F[G[X]]
存在,您知道如何撰写两个G[X]
的事实。
现在,如果是Monad[G]
和F[G[X]
,即使您声明F[H[X]]
和G
有H
个实例,您仍然不会有一般的组合方式。
我害怕撰写Monad
和F[G[X]]
没有针对monad变换器的一般解决方案。
答案 1 :(得分:0)
您可以尝试使用monad变压器堆栈ListT[OptionT[Future, Int]]
,它可以一次组合所有效果。您可以将a
和b
提升为该monad变压器堆栈的值。