【发布时间】:2014-09-19 19:56:59
【问题描述】:
假设我们有两个值包装在不同的 monad 中(例如 Try 和 Option):
val x: Option[Int] = Some(10)
val y: Try[Int] = Success(4)
我们希望得到这些值的总和。一个人会写
val z = for {
xval <- x
yval <- y
} yield xval + yval
但由于类型错误,它不会被编译。有没有一种惯用的 Scala 方式来处理这个问题?
【问题讨论】:
-
Monads generally are not composable/combinable,但使用 Try 你可以使用 .toOption
-
你也不会真正在 Haskell 中组合 monad,你只会将它们全部堆叠起来,创建越来越深的嵌套
-
Monad 不可组合,寻找 Monad 转换器,例如
TryT[Option, A]
标签: scala