我必须调用2个函数,第一个返回一个\ / [String,Int],另一个返回Future [Int]。
我需要累积这2个函数调用的验证。
这是我的尝试:
import scala.concurrent.Future
import scalaz._, Scalaz._, Validation._
import scala.concurrent.ExecutionContext.Implicits.global
def positive(x: Int): \/[String,Int] = if(x<0) "ko".left else x.right
def inc(x: Int): Future[Int] = if (x >5) Future.successful(x +1) else Future.failed(new Exception("failed"))
def eval(x:Int, y:Int): Future[Validation[String, (Int, Int)]] = for {
v1 <- Future.successful(positive(x).validation)
v2 <- inc(y).map(x => success(x)).recover{case ex: Exception => failure(ex.getMessage)}
} yield ((v1 |@| v2){(_,_)})
)是否有更简单的方法来避免将未来错误手动绑定到成功/失败?
2)我想使用ValidationNel来累积错误消息(现在我检索消息,如&#34;失败(kofailed)&#34;只有两条消息的串联)但我不# 39;不知道是否可以从\ /类型获得ValidationNel。