[英]scalaz 7 equivalent of `<|*|>` from scalaz 6
在Nick Partridge關於導出scalaz的演示文稿中 ,基於舊版本的scalaz,他使用函數引入了驗證:
def even(x: Int): Validation[NonEmptyList[String], Int] =
if (x % 2 == 0) x.success else { s"not even: $x".wrapNel.failure }
然后他結合這個使用
even(1) <|*|> even(2)
應用測試並返回帶有失敗消息的驗證。 使用scalaz 7我得到了
scala> even(1) <|*|> even(2)
<console>:18: error: value <|*|> is not a member of scalaz.Validation[scalaz.NonEmptyList[String],Int]
even(1) <|*|> even(2)
^
什么是scalaz 7相當於這個組合器?
這現在稱為tuple
,所以你可以寫例如:
import scalaz._, Scalaz._
def even(x: Int): Validation[NonEmptyList[String], Int] =
if (x % 2 == 0) x.success else s"not even: $x".failureNel
val pair: ValidationNel[String, (Int, Int)] = even(1) tuple even(2)
不幸的是,我不確定是否有更好的方法來找出這種事情,而不是檢查源的最后6.0標記,搜索,然后比較簽名。
你想使用|@|
運營商。
scala> (even(1) |@| even(2) |@| even(3)) { (_,_,_) }
<console> Failure(NonEmptyList(not even: 1, not even: 3))
scala> (even(2) |@| even(4) |@| even(6)) { (_,_,_) }
<console> Success((2,4,6))
將其與tuple
運算符進行比較:
scala> even(1) tuple even(2) tuple even(3)
<console> Failure(NonEmptyList(not even: 1, not even: 3))
scala> even(2) tuple even(4) tuple even(6)
<console> Success(((2,4),6))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.