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