scalaz 7 等同于 scalaz 6 中的`<|*|>`
scalaz 7 equivalent of `<|*|>` from scalaz 6
在Nick Partridge's presentation on deriving 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)
应用测试和 returns 验证失败消息。使用 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))
在Nick Partridge's presentation on deriving 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)
应用测试和 returns 验证失败消息。使用 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))