[英]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.