Validation

sealed abstract
class Validation[E, A] extends Product with Serializable

Represents either:

  • Success(a), or
  • Failure(e).

Isomorphic to scala.Either and scalaz.\/. The motivation for a Validation is to provide the instance Applicative[[a]Validation[E, a]] that accumulate failures through a scalaz.Semigroup[E].

scalaz.NonEmptyList is commonly chosen as a type constructor for the type E. As a convenience, an alias scalaz.ValidationNel[E] is provided as a shorthand for scalaz.Validation[NonEmptyList[E]], and a method Validation#toValidationNel converts Validation[E] to ValidationNel[E].

Example:

import scalaz._, std.AllInstances._

def parseInt(s: String): Validation[String, Int] =
 try { Success(s.toInt) } catch { case ex: NumberFormatException => Failure(ex.getMessage) }
val V = Applicative[ValidationNel[String, *]]

val x: ValidationNel[String, Int] =
 V.apply2(parseInt("1.x").toValidationNel, parseInt("1..0").toValidationNel)(_ * _)
 // Failure(NonEmptyList(For input string: "1..0", For input string: "1.x"))
Type Params
A

The type of the Success

E

The type of the Failure

Companion
object
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
class Failure[E, A]
class Success[E, A]

Type members

Classlikes

final
class SwitchingValidation[X](s: => X)

Value members

Concrete methods

def +++(x: => Validation[E, A])(implicit M1: Semigroup[A], M2: Semigroup[E]): Validation[E, A]

Sums up values inside validation, if both are success or failure. Returns first failure otherwise.

Sums up values inside validation, if both are success or failure. Returns first failure otherwise.

success(v1) +++ success(v2) → success(v1 + v2)
success(v1) +++ failure(v2) → failure(v2)
failure(v1) +++ success(v2) → failure(v1)
failure(v1) +++ failure(v2) → failure(v1 + v2)
def +|+(x: Validation[E, A])(implicit es: Semigroup[E], as: Semigroup[A]): Validation[E, A]

If this and that are both success, or both a failure, combine them with the provided Semigroup for each. Otherwise, return the success. Alias for append

If this and that are both success, or both a failure, combine them with the provided Semigroup for each. Otherwise, return the success. Alias for append

def ===(x: Validation[E, A])(implicit EE: Equal[E], EA: Equal[A]): Boolean

Compare two validations values for equality.

Compare two validations values for equality.

def @\/[EE, AA](k: E \/ A => EE \/ AA): Validation[EE, AA]

Run a disjunction function and back to validation again. Alias for disjunctioned

Run a disjunction function and back to validation again. Alias for disjunctioned

def andThen[EE >: E, B](f: A => Validation[EE, B]): Validation[EE, B]
def ap[B](x: => Validation[E, A => B])(implicit E: Semigroup[E]): Validation[E, B]

Apply a function in the environment of the success of this validation, accumulating errors.

Apply a function in the environment of the success of this validation, accumulating errors.

def append(that: Validation[E, A])(implicit es: Semigroup[E], as: Semigroup[A]): Validation[E, A]

If this and that are both success, or both a failure, combine them with the provided Semigroup for each. Otherwise, return the success. Alias for +|+

If this and that are both success, or both a failure, combine them with the provided Semigroup for each. Otherwise, return the success. Alias for +|+

def bimap[C, D](f: E => C, g: A => D): Validation[C, D]

Binary functor map on this validation.

Binary functor map on this validation.

def bitraverse[G[_] : Functor, C, D](f: E => G[C], g: A => G[D]): G[Validation[C, D]]

Binary functor traverse on this validation.

Binary functor traverse on this validation.

def compare(x: Validation[E, A])(implicit OE: Order[E], OA: Order[A]): Ordering

Compare two validations values for ordering.

Compare two validations values for ordering.

def disjunctioned[EE, AA](k: E \/ A => EE \/ AA): Validation[EE, AA]

Run a disjunction function and back to validation again. Alias for @\/

Run a disjunction function and back to validation again. Alias for @\/

def ensure(onFailure: => E)(f: A => Boolean): Validation[E, A]

Ensures that the success value of this validation satisfies the given predicate, or fails with the given value.

Ensures that the success value of this validation satisfies the given predicate, or fails with the given value.

def excepting(pf: PartialFunction[A, E]): Validation[E, A]

Return a Validation formed by the application of a partial function across the success of this value:

Return a Validation formed by the application of a partial function across the success of this value:

 strings map (_.parseInt excepting { case i if i < 0 => new Exception(s"Int must be positive: $i") })
Since

7.0.2

def exists(f: A => Boolean): Boolean

Return true if this validation is a success value satisfying the given predicate.

Return true if this validation is a success value satisfying the given predicate.

def filter(p: A => Boolean)(implicit M: Monoid[E]): Validation[E, A]

Filter on the success of this validation.

Filter on the success of this validation.

def findSuccess(that: => Validation[E, A])(implicit es: Semigroup[E]): Validation[E, A]

If this is a success, return it; otherwise, if that is a success, return it; otherwise, combine the failures with the specified semigroup.

If this is a success, return it; otherwise, if that is a success, return it; otherwise, combine the failures with the specified semigroup.

def fold[X](fail: E => X, succ: A => X): X

Catamorphism. Run the first given function if failure, otherwise, the second given function.

Catamorphism. Run the first given function if failure, otherwise, the second given function.

def foldConst[X](fail: => X, success: => X): X

If this validation is success, return success, otherwise, return fail.

If this validation is success, return success, otherwise, return fail.

def foldRight[B](z: => B)(f: (A, => B) => B): B

Fold on the success of this validation.

Fold on the success of this validation.

def forall(f: A => Boolean): Boolean

Return true if this validation is a failure value or the success value satisfies the given predicate.

Return true if this validation is a failure value or the success value satisfies the given predicate.

def foreach(f: A => Unit): Unit

Run the side-effect on the success of this validation.

Run the side-effect on the success of this validation.

def getOrElse[AA >: A](x: => AA): AA

Return the success value of this validation or the given default if failure. Alias for |

Return the success value of this validation or the given default if failure. Alias for |

def isFailure: Boolean

Return true if this validation is failure.

Return true if this validation is failure.

def isSuccess: Boolean

Return true if this validation is success.

Return true if this validation is success.

def leftMap[C](f: E => C): Validation[C, A]

Run the given function on the left value.

Run the given function on the left value.

def loopFailure[X](success: A => X, failure: E => X \/ Validation[E, A]): X

Spin in tail-position on the failure value of this validation.

Spin in tail-position on the failure value of this validation.

def loopSuccess[X](success: A => X \/ Validation[E, A], failure: E => X): X

Spin in tail-position on the success value of this validation.

Spin in tail-position on the success value of this validation.

def map[B](f: A => B): Validation[E, B]

Map on the success of this validation.

Map on the success of this validation.

def orElse(x: => Validation[E, A]): Validation[E, A]

Return this if it is a success, otherwise, return the given value. Alias for |||

Return this if it is a success, otherwise, return the given value. Alias for |||

def swap: Validation[A, E]

Flip the failure/success values in this validation. Alias for unary_~

Flip the failure/success values in this validation. Alias for unary_~

def swapped[EE, AA](k: Validation[A, E] => Validation[AA, EE]): Validation[EE, AA]

Run the given function on this swapped value. Alias for ~

Run the given function on this swapped value. Alias for ~

def toDisjunction: E \/ A

Convert to a disjunction.

Convert to a disjunction.

def toEither: Either[E, A]

Convert to a core scala.Either at your own peril.

Convert to a core scala.Either at your own peril.

def toIList[AA >: A]: IList[AA]

Return an empty ilist or an ilist with one element on the success of this validation.

Return an empty ilist or an ilist with one element on the success of this validation.

def toList: List[A]

Return an empty list or a list with one element on the success of this validation.

Return an empty list or a list with one element on the success of this validation.

def toMaybe[AA >: A]: Maybe[AA]

Return an empty maybe or maybe with the element on the success of this validation. Useful to sweep errors under the carpet.

Return an empty maybe or maybe with the element on the success of this validation. Useful to sweep errors under the carpet.

def toOption: Option[A]

Return an empty option or option with one element on the success of this validation. Useful to sweep errors under the carpet.

Return an empty option or option with one element on the success of this validation. Useful to sweep errors under the carpet.

def toStream: Stream[A]

Return an empty stream or stream with one element on the success of this validation.

Return an empty stream or stream with one element on the success of this validation.

Wraps the failure value in a scalaz.NonEmptyList

Wraps the failure value in a scalaz.NonEmptyList

def traverse[G[_] : Applicative, B](f: A => G[B]): G[Validation[E, B]]

Traverse on the success of this validation.

Traverse on the success of this validation.

def unary_~: Validation[A, E]

Flip the failure/success values in this validation. Alias for swap

Flip the failure/success values in this validation. Alias for swap

def valueOr[AA >: A](x: E => AA): AA

Return the success value of this validation or run the given function on the failure.

Return the success value of this validation or run the given function on the failure.

def |[AA >: A](x: => AA): AA

Return the success value of this validation or the given default if failure. Alias for getOrElse

Return the success value of this validation or the given default if failure. Alias for getOrElse

def |||(x: => Validation[E, A]): Validation[E, A]

Return this if it is a success, otherwise, return the given value. Alias for orElse

Return this if it is a success, otherwise, return the given value. Alias for orElse

def ~[EE, AA](k: Validation[A, E] => Validation[AA, EE]): Validation[EE, AA]

Run the given function on this swapped value. Alias for swapped

Run the given function on this swapped value. Alias for swapped

Deprecated methods

@deprecated("Due to SI-1980, <
def :?>>[X](success: => X): SwitchingValidation[X]

If this validation is success, return the given X value, otherwise, return the X value given to the return value.

If this validation is success, return the given X value, otherwise, return the X value given to the return value.

Deprecated
[Since version 7.3.0]
@deprecated("Use `toDisjunction`", "7.3.0")
def disjunction: E \/ A
Deprecated

Inherited methods

def canEqual(that: Any): Boolean
Inherited from
Equals
def productArity: Int
Inherited from
Product
def productElement(n: Int): Any
Inherited from
Product
def productElementName(n: Int): String
Inherited from
Product
def productElementNames: Iterator[String]
Inherited from
Product
def productIterator: Iterator[Any]
Inherited from
Product
def productPrefix: String
Inherited from
Product