Scala 中的 Monad 变形金刚

Monad Transformers in Scala

我一直在尝试简单的 Monad 变形金刚,我在其中理解涉及 M[F[A]],其中 MF 是单子。如果 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 Transformers 帮助您组合两个 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 转换器堆栈的值中。