scala - flatMap 与 ValidationNel 的析取

标签 scala scalaz

我需要一个组合器,将析取 (\/) 与 ValidationNel 进行平面映射。

这是我的尝试:

def flatMap[A, B, C](d: \/[A, B], f: B => ValidationNel[A, C]) : ValidationNel[A, C] =
  d.leftMap(_.wrapNel).flatMap(f(_).disjunction).validation

有更优雅的解决方案吗?

最佳答案

在这种情况下,我只是折叠析取 - 它更简洁并且创建更少的中间值:

import scalaz._, Scalaz._

def flatMap[A, B, C](
  d: \/[A, B],
  f: B => ValidationNel[A, C]
): ValidationNel[A, C] = d.fold(_.failureNel[C], f)

您还可以导入Validation.FlatMap._,然后使用d.validationNel.flatMap(f),但我不推荐这样做。我喜欢 Cats 在其验证类型上有一个 andThen 方法,类似于 flatMap 但没有糖名 - 我希望 Scalaz 也有类似的东西。

关于scala - flatMap 与 ValidationNel 的析取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34581718/

相关文章:

Scala SBT 如何同时运行测试和测试

Scalaz 的 Unapply : why doesn't traverseU work with State? 为什么必须存在 traverseS?

Scala:UI 对象/渲染器的设计模式

scala - Scala 中方法的条件调用

scala - 在 Scala 中将当前类作为参数传递

scala - 如何使用 `ssc.fileStream()` 读取 Parquet 文件?传递给 `ssc.fileStream()` 的类型是什么?

scala - 如何使用scalaz.WriterT登录for表达式?

list - 使用 Map 而不是 FlatMap 将 List[Option[A]] 转换为 Option[List[A]]

java - mongodb scala 驱动程序 casbah 是否自动管理连接池

scala - 将 Scala 的 Int 数组转换为 Java 的 Integer 数组