【问题标题】:Monad Transformers in ScalaScala 中的 Monad 变形金刚
【发布时间】:2016-11-09 09:14:35
【问题描述】:

我一直在尝试简单的 Monad 变形金刚,我对涉及 M[F[A]] 的理解,其中 MF 是单子。如果S 是不同的单子,我如何使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 中使用它们的顺序?

【问题讨论】:

    标签: scala monads scalaz monad-transformers


    【解决方案1】:

    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 转换器的通用解决方案。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 2020-11-18
        • 2020-08-29
        • 2015-10-09
        相关资源
        最近更新 更多