import scalaz._
import Scalaz._
"abc".parseInt
这将返回Validation[NumberFormatException, Int]
。
有没有办法在失败方面应用函数(例如toString
)来获得Validation[String, Int]
?
答案 0 :(得分:19)
<-:
上定义了一对方法:->
和MAB[M[_,_], A, B]
,只要有{M[A, B]
,就会映射到Bifunctor[M]
的左侧和右侧。{ 1}}。 Validation
恰好是一个bifunctor,所以你可以这样做:
((_:NumberFormatException).toString) <-: "123".parseInt
Scala的类型推断通常从左向右流动,因此实际上更短:
"123".parseInt.<-:(_.toString)
并且需要较少的注释。
答案 1 :(得分:11)
FailProjection上有一个仿函数。所以你可以做到
v.fail.map(f).validation
(无法输入FailProjection,验证可以退出)
可选地
v.fold(f(_).failure, _.success)
两者都有点冗长。也许更熟悉scalaz的人可以提出更好的东西