gpt4 book ai didi

Scala 的 Try 单子(monad)链

转载 作者:行者123 更新时间:2023-12-04 14:11:22 25 4
gpt4 key购买 nike

考虑以下函数链f , gh使用一元的理解。

  for {
x <- List ( 11, 22, 33, 44, 55 )
y <- f ( x )
z <- g ( y )
a <- h ( z )
} yield a

如果 f , gh都有签名:
  Int => Option [ Int ] 

然后 for-comprehension 编译得很好。但是,如果我替换 Option [ Int ]经过 Try [ Int ] , Scala 的类型推断器提示这条线
  y <- f ( x )

带有以下错误消息。
  error: type mismatch;
found : scala.util.Try[Int]
required: scala.collection.GenTraversableOnce[?]
y <- f ( x )

为什么?两个 Option [ _ ]Try [ _ ]是(或应该是)单子(monad),并且应该按照草图顺利工作。

最佳答案

您只能在 for 理解中使用相同类型的 monad。在这种情况下,您的所有值都必须是 GenTraversableOnce ,因为第一个是。它适用于 Option , 因为有一个来自 Option 的隐式转换至Seq ,但这对于 Try 是不可能的.

关于Scala 的 Try 单子(monad)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097769/

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