繁体   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