假设我要编写以下函数:
val mayFail1: Int => Error \/ Int = ???
val slowAndMayFail: Int => Error \/ String = ???
val mayFail2: String => Error \/ Int = ???
val mayFail3: String => Error \/ Int = ???
val mayFail: Int => Error \/ Int = {x =>
for {
x1 <- mayFail1(x)
s <- slowAndMayFail(x1)
x2 <- mayFail2(s)
x3 <- mayFail3(x2)
} yield x3
}
由于 ,该函数mayFail
很慢,slowAndMayFail
所以我希望它返回.Error \/ Int
直接的方法可能是让slowAndMayFail
return scalaz.Future[Error\/Int]]
,让所有其他函数(mayFail1
、mayFail2
等)Future[Error\/Int]]
也返回,然后将EitherT
它们相加组合在一起。
是否有意义 ?有更简单/更简单的解决方案吗?
我知道这scalaz
提供了任务,但我现在坚持Future
。