import scalaz._
import Scalaz._
"abc".parseInt
これはValidation[NumberFormatException, Int]
を返します。 toString
などの障害側の機能を適用してValidation[String, Int]
を取得する方法はありますか?Scalazでの検証検証エラー
import scalaz._
import Scalaz._
"abc".parseInt
これはValidation[NumberFormatException, Int]
を返します。 toString
などの障害側の機能を適用してValidation[String, Int]
を取得する方法はありますか?Scalazでの検証検証エラー
より良い何かを思い付くことができます。あなたがこれを行うことができますのでValidation
は、bifunctorであることを起こる:
((_:NumberFormatException).toString) <-: "123".parseInt
Scalaの型推論は、一般的に、左から右に流れ、これは実際には短いです:
"123".parseInt.<-:(_.toString)
少なく注釈が必要です。
FailProjectionにはファンクタがあります。だから、少し冗長
v.fail.map(f).validation
(それから抜け出すためにFailProjection、検証として入力しない)
また
v.fold(f(_).failure, _.success)
両方を行うことができます。たぶんscalazに慣れて誰かがいる限りBifunctor[M]
があるとして任意のM[A, B]
の左側と右側のマップMAB[M[_,_], A, B]
に定義されたメソッド<-:
と:->
のペアがあり
は、 'f"と "Failure"が動作しないようにすることができます: '' 123 ".parseInt.fold(_。toString andThen Failure)'はタイプミスマッチを出力します。他の1つは正常に動作します。 – huynhjl
@huynhjl:foldは2つの関数をとります。エラーケースの最初のもの、成功のケースの2番目のものです。 v.fold(_。toString.fail、_.success)は機能します –
fold引数にはデフォルト値(ID)がありますか? –
ニース。 def Bimap [C、D](最初はA => C =アイデンティティ[A] \ _、2番目:B => D =アイデンティティ[B] \ _)(暗黙のb :Bifunctor [M]):M [C、D] = b.bimap(value、first、second)。だから私たちは "123"を得る.parseInt.bimap(\ _。toString) –
それはすばらしいだろう。プルリクエストを送信します。 – Apocalisp