Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将值提升到ValidationNel中_Scala_Scalaz - Fatal编程技术网

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的人来说,一目了然也可能更难理解。不过,我看不出有什么强有力的理由选择其中一个而不是另一个