gpt4 book ai didi

scala - 理解 Scala 中的 monad 转换器

转载 作者:行者123 更新时间:2023-12-01 11:20:07 25 4
gpt4 key购买 nike

我试图了解如何使用 Monad Transformers。我读了wiki article关于它,仍然有一些问题。

我们有IO需要读取用户输入的 monad。但并不总是提供输入。所以它是 Option .为了简化,我们可以定义一个 monad OptionT它“封装”了 IO 的操作单子(monad)。

在我的特殊情况下,我有两种类型的单子(monad) Future[Option[String]]Future[List[Int]] .这意味着简化它我需要两个不同的变压器ListT[T]OptionT[T]对于我嵌入的每种单子(monad)类型 Future行为……对吧?

最佳答案

是的,monad 转换器的工作方式是帮助您处理正在被“外部”monad“转换”的“内部”monad。

所以F[Option[A]可以变成OptionT[F, A] (其中 F 是任何单子(monad)),这更容易使用。

关于 ListT ,可能没那么容易。例如 cats不提供,见 their FAQ了解更多信息。正如他们所建议的,您可以使用 Nested作为不需要 flatMap 的情况的替代品, 例如:

import cats._
import cats.implicits._
import cats.data.Nested
import scala.concurrent.Future
import scala.concurrent.Implicits.global

val futList = Future(List(1, 2, 3))
Nested(futList).map(_ + 1).value // Future(List(2, 3, 4))

如果你想对 monad 更改器(mutator)有另一种看法,这是我撰写的一篇短文: https://blog.buildo.io/monad-transformers-for-the-working-programmer-aa7e981190e7

关于scala - 理解 Scala 中的 monad 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44868593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com