映射Scalaz验证失败

时间:2011-09-22 14:37:25

标签: scala scalaz

import scalaz._
import Scalaz._

"abc".parseInt

这将返回Validation[NumberFormatException, Int]。 有没有办法在失败方面应用函数(例如toString)来获得Validation[String, Int]

2 个答案:

答案 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的人可以提出更好的东西