斯卡拉的Monad变形金刚

时间:2016-11-09 09:14:35

标签: scala monads scalaz monad-transformers

我一直在尝试使用简单的Monad变形金刚来理解涉及M[F[A]] MF是monad的M[F[A]]。如果M[S[A]]是不同的monad,如何让Sval a: Future[List[Int]] = ... val b: Future[Option[Int]] = ... 在for comp中一起工作?

例如:

a

ListT[Future, Int]需要bOptionT[Future, Int]需要compile 'com.squareup.picasso:picasso:2.5.2' ,但这些不构成,我是否需要使用其他变压器?这取决于我在for comp中使用它们的顺序吗?

2 个答案:

答案 0 :(得分:4)

Monad Transformers可帮助您编写两个read_csv类型的值。

换句话说,monad变换器与F[G[X]]一起使用,因为它们利用了如果F[G[X]]存在,您知道如何撰写两个G[X]的事实。

现在,如果是Monad[G]F[G[X],即使您声明F[H[X]]GH个实例,您仍然不会有一般的组合方式。

我害怕撰写MonadF[G[X]]没有针对monad变换器的一般解决方案。

答案 1 :(得分:0)

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