Scalaz ValidationNel - 折叠

时间:2018-05-29 08:20:01

标签: scala validation nested scalaz fold

我最近使用ScalaZ进行验证,并决定选择ValidationNel,因为不需要快速失败行为。我有超过12次验证检查,因此我无法使用operator | @ |所以我用< *>表达了它那样:

validatePropertyA(object.propertyA) <*>
  (validatePropertyB(object.propertyB) <*>
    (validatePropertyC(object.propertyC) map (_ => _ => _ => object)))

有大约15个要检查的属性,这个代码变得相当复杂,并且第一眼看起来就像用foldRight表示的东西,但我不知道如何实现这一点。

foldRight对于使这段代码简洁或是否必须使用别的东西是可行的吗?

1 个答案:

答案 0 :(得分:1)

您可以使用traversesequence

轻松完成此操作
List(validatePropertyA(object.propertyA), validatePropertyB(object.propertyB), ...)
  .sequence.map(_ => object)

这会返回Validated左侧的所有错误和右侧的object