import scalaz._
import Scalaz._
"abc".parseInt
这将返回一个Validation[NumberFormatException, Int]
. 有没有办法我可以在失败端(例如toString
)应用一个函数来获得一个Validation[String, Int]
?
只要有. <-:
_ _ _ 恰好是一个双函子,所以你可以这样做::->
MAB[M[_,_], A, B]
M[A, B]
Bifunctor[M]
Validation
((_:NumberFormatException).toString) <-: "123".parseInt
Scala 的类型推断一般是从左向右流动的,所以这实际上更短:
"123".parseInt.<-:(_.toString)
并且需要更少的注释。
FailProjection 上有一个函子。所以你可以做
v.fail.map(f).validation
(未能输入为 FailProjection,验证退出)
或者
v.fold(f(_).failure, _.success)
两者都有点冗长。也许更熟悉 scalaz 的人可以想出更好的东西