【问题标题】:Why do we need Monad Transformers in Scala?为什么我们需要 Scala 中的 Monad Transformers?
【发布时间】:2014-03-12 12:00:45
【问题描述】:

我的理解如下:

假设 M1M2 是单子,即它们提供符合单子定律的函数 unitflatMap。不幸的是,我们不能M1[M2] 创建 unitflatMap。看起来unitflatMap 并不总是 存在于任何 M1M2。我不知道我们是否需要证明这一点。

因此解决方案是为M1[M2] 创建一个包装器 W,以便W[M1, M2] 一个monad,并使用它来代替。这个包装器 W 称为 Monad Transformer

我理解正确吗?

【问题讨论】:

  • 快速手动回答:monad 在一般情况下不会组合,但有时特定的 monad 会,并且 monad 转换器提供了一种实现组合的方法。请注意,monad 转换器不是本身就是一个 monad——你的总结在这一点上可能是模棱两可的。
  • @TravisBrown 谢谢。我确信 monad 转换器 本身就是一个 monad。例如,ListT 是一个单子吗?它似乎同时提供unitflatMap
  • ListT 一旦被应用到一个 monad 就是一个 monad,所以 ListT[Option, _] 就是一个 monad(从道德上讲——这当然不是有效的 Scala 语法)。
  • @TravisBrown 谢谢。现在我知道了。 (我会解决这个问题)

标签: scala functional-programming monads monad-transformers


【解决方案1】:

你是对的。通常,它们用于需要组合 monad 属性的理解结构。

Monad 转换器“逐步”here.

【讨论】:

  • 谢谢。我知道你的介绍。这真的很棒。我还是没听懂,但我会尝试(并在这里提问)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 2023-03-29
  • 1970-01-01
  • 2015-07-10
相关资源
最近更新 更多