flatMap 与 ValidationNel 的析取
flatMap a disjunction with a ValidationNel
我需要一个组合器,它 flatMap 一个析取 (\/
) 与 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
但没有 sugar-y 名称——我希望 Scalaz 有类似的东西。
我需要一个组合器,它 flatMap 一个析取 (\/
) 与 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
但没有 sugar-y 名称——我希望 Scalaz 有类似的东西。