簡體   English   中英

scalaz 7相當於來自scalaz 6的`<| * |>`

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM