首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scalaz 7等价于`<|*|>` 6

scalaz 7等价于`<|*|>` 6
EN

Stack Overflow用户
提问于 2015-10-07 16:22:02
回答 2查看 189关注 0票数 5

Nick Partridge's presentation on deriving scalaz中,基于较早版本的scalaz,他使用一个函数引入了验证:

代码语言:javascript
复制
def even(x: Int): Validation[NonEmptyList[String], Int] =
  if (x % 2 == 0) x.success else { s"not even: $x".wrapNel.failure }

然后他用

代码语言:javascript
复制
even(1) <|*|> even(2)

它应用测试并返回带有失败消息的验证。使用黄曲柳7我得到

代码语言:javascript
复制
scala> even(1) <|*|> even(2)
<console>:18: error: value <|*|> is not a member of scalaz.Validation[scalaz.NonEmptyList[String],Int]
       even(1) <|*|> even(2)
               ^

这个组合器的等价物是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-07 16:58:12

这现在被称为tuple,因此您可以编写例如:

代码语言:javascript
复制
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标记,搜索,然后比较签名。

票数 5
EN

Stack Overflow用户

发布于 2015-10-07 21:31:04

您希望使用|@|操作符。

代码语言:javascript
复制
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操作符进行比较:

代码语言:javascript
复制
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))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32997508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档