[英]Map on Scalaz Validation failure
import scalaz._
import Scalaz._
"abc".parseInt
这将返回Validation[NumberFormatException, Int]
。 有没有办法可以在失败方面应用一个函数(比如toString
)来获得Validation[String, Int]
?
在MAB[M[_,_], A, B]
上定义了一对方法<-:
和:->
MAB[M[_,_], A, B]
它们映射在任何M[A, B]
的左侧和右侧M[A, B]
只要有一个Bifunctor[M]
。 Validation
恰好是一个bifunctor,所以你可以这样做:
((_:NumberFormatException).toString) <-: "123".parseInt
Scala的类型推断通常从左向右流动,因此实际上更短:
"123".parseInt.<-:(_.toString)
并且需要较少的注释。
FailProjection上有一个仿函数。 所以你可以做到
v.fail.map(f).validation
(无法输入FailProjection,验证以摆脱它)
另外
v.fold(f(_).failure, _.success)
两者都有点冗长。 也许更熟悉scalaz的人可以想出更好的东西
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.