3

假设我要编写以下函数:

 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

直接的方法可能是让slowAndMayFailreturn scalaz.Future[Error\/Int]],让所有其他函数(mayFail1mayFail2等)Future[Error\/Int]]也返回,然后将EitherT它们相加组合在一起。

是否有意义 ?有更简单/更简单的解决方案吗?

我知道这scalaz提供了任务,但我现在坚持Future

4

0 回答 0