Scala 中的 Monad 变形金刚

Mat*_*ing 3 monads scala monad-transformers scalaz

我一直在尝试简单的 Monad Transformers,其中我对涉及M[F[A]]whereMFare monad 的理解。如果是不同的单子,我如何在 for comp 中一起制作M[F[A]]和工作?M[S[A]]S

例如:

val a: Future[List[Int]] = ...
val b: Future[Option[Int]] = ...
Run Code Online (Sandbox Code Playgroud)

a需要 aListT[Future, Int]b需要 anOptionT[Future, Int]但这些不组成,我需要使用另一个变压器吗?这取决于我在 for comp 中使用它们的顺序吗?

Gab*_*lla 5

Monad Transformers 帮助您组合两个类型的值F[G[X]]

换句话说,monad 转换器可以使用,F[G[X]]因为它们利用了这样一个事实:您知道如何组合两个G[X](如果Monad[G]存在)。

F[G[X]现在,在和 的情况下F[H[X]],即使您声明GHMonad实例,您仍然没有组合它们的通用方法。

我担心编写F[G[X]]并且F[H[X]]没有关于 monad 变压器的通用解决方案。