18
import scalaz._
import Scalaz._

"abc".parseInt

这将返回一个Validation[NumberFormatException, Int]. 有没有办法我可以在失败端(例如toString)应用一个函数来获得一个Validation[String, Int]

4

2 回答 2

19

只要有. <-:_ _ _ 恰好是一个双函子,所以你可以这样做::->MAB[M[_,_], A, B]M[A, B]Bifunctor[M]Validation

((_:NumberFormatException).toString) <-: "123".parseInt

Scala 的类型推断一般是从左向右流动的,所以这实际上更短:

"123".parseInt.<-:(_.toString)

并且需要更少的注释。

于 2011-09-22T16:42:41.893 回答
11

FailProjection 上有一个函子。所以你可以做

v.fail.map(f).validation

(未能输入为 FailProjection,验证退出)

或者

v.fold(f(_).failure, _.success)

两者都有点冗长。也许更熟悉 scalaz 的人可以想出更好的东西

于 2011-09-22T15:06:28.007 回答