import scalaz._
import Scalaz._
"abc".parseInt
这将返回一个Validation[NumberFormatException, Int]
。
是否有办法在失败的一侧应用一个函数(比如toString
),以获得一个Validation[String, Int]
?在MAB[M[_,_], A, B]
上定义了一对方法<-:
和:->
,只要有一个Bifunctor[M]
就可以将其映射到任何M[A, B]
的左侧和右侧。 Validation
正好是一个bifunctor,所以你可以这样做:
((_:NumberFormatException).toString) <-: "123".parseInt
Scala的类型推断通常从左到右进行,因此这实际上更短:
"123".parseInt.<-:(_.toString)
并且需要较少的注释。
在FailProjection上有一个函数对象(functor),因此您可以执行以下操作:
v.fail.map(f).validation
(打成 FailProjection,验证无法脱离)
或者
v.fold(f(_).failure, _.success)
有点啰嗦。或许熟悉scalaz更多的人可以想出更好的方法。
f andthen Failure
正常工作: "123".parseInt.fold(_.toString andThen Failure)
打印出 类型不匹配
。另一个可以正常工作。 - huynhjl*
的其他内容一样。 - Apocalisp