将值提升到 ValidationNel
lift a value into a ValidationNel
给定一个值和一个谓词,如何创建一个 ValidationNel
?
这是我的代码:
def toValidationNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
if (f(a)) fail.failureNel[A] else a.successNel[E]
scalaz 中是否存在组合器?
您可以使用 scala.util.Either
中的 Either.cond
:
import scalaz.ValidationNel
import scalaz.syntax.std.either._
import scalaz.syntax.nel._
def toValidationNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
Either.cond(f(a), a, fail.wrapNel).validation
Scalaz 包含一个 either
布尔值扩展方法,类似于 Either.cond
但可以说更好一点:
import scalaz._, Scalaz._
def toValNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
f(a).either(a).or(fail.wrapNel).validation
我从来都不喜欢 Either.cond
的右侧出现在左侧这一事实,Scalaz 的版本使 either-or-ness 在我看来更清晰一些,但也可能更难让不熟悉Scalaz的人一目了然。不过,我看不出有什么充分理由偏爱其中之一。
给定一个值和一个谓词,如何创建一个 ValidationNel
?
这是我的代码:
def toValidationNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
if (f(a)) fail.failureNel[A] else a.successNel[E]
scalaz 中是否存在组合器?
您可以使用 scala.util.Either
中的 Either.cond
:
import scalaz.ValidationNel
import scalaz.syntax.std.either._
import scalaz.syntax.nel._
def toValidationNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
Either.cond(f(a), a, fail.wrapNel).validation
Scalaz 包含一个 either
布尔值扩展方法,类似于 Either.cond
但可以说更好一点:
import scalaz._, Scalaz._
def toValNel[A, E](a: A)(f: A => Boolean, fail: => E) : ValidationNel[E, A] =
f(a).either(a).or(fail.wrapNel).validation
我从来都不喜欢 Either.cond
的右侧出现在左侧这一事实,Scalaz 的版本使 either-or-ness 在我看来更清晰一些,但也可能更难让不熟悉Scalaz的人一目了然。不过,我看不出有什么充分理由偏爱其中之一。