import scalaz._
import Scalaz._
"abc".parseInt
这将返回Validation[NumberFormatException, Int]
。 有没有一种方法可以在故障端应用功能(例如toString
)以获得Validation[String, Int]
?斯卡拉兹验证失败
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上有一个函子。所以,你可以做
v.fail.map(f).validation
(无法输入的FailProjection,验证,以摆脱它)
或者
v.fold(f(_).failure, _.success)
两个有点冗长。也许有人更熟悉scalaz能拿出更好的东西
无法获得'f和失败'工作:'“123”.parseInt.fold(_。toString和Then Failure)'打印'类型不匹配'。另一个工作正常。 – huynhjl
@huynhjl:fold有两个功能:第一个是错误情况,第二个是成功案例。 v.fold(_。toString.fail,_.success)的作品 –
但折叠参数有默认值(身份),他们没有? –
不错。我想知道以下内容可能对MAB有用:def bimap [C,D](first:A => C = identity [A] \ _,second:B => D = identity [B] \ _)(implicit b :Bifunctor [M]):M [C,D] = b.bimap(值,第一,第二)。所以我们得到“123”.parseInt.bimap(\ _。toString) –
那真是太棒了。发送拉请求。 – Apocalisp