Scala 将值提升到ValidationNel中
给定一个值和一个谓词,如何创建Scala 将值提升到ValidationNel中,scala,scalaz,Scala,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使用。或者: import scalaz.ValidationNel impor
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使用。或者:
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包含一个布尔函数的other
扩展方法,类似于other.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
我从来没有真正喜欢过这样一个事实,each.cond
的右边在左边,Scalaz的版本让我的眼睛更清楚地看到了非此即彼,但对不熟悉Scalaz的人来说,一目了然也可能更难理解。不过,我看不出有什么强有力的理由选择其中一个而不是另一个