Packages

object Either extends Serializable

Source
Either.scala
Linear Supertypes
Serializable, java.io.Serializable, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Either
  2. Serializable
  3. Serializable
  4. AnyRef
  5. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final case class LeftProjection [+A, +B](e: Either[A, B]) extends Product with Serializable

    Projects an Either into a Left.

    Projects an Either into a Left.

    This allows for-comprehensions over the left side of Either instances, reversing Either's usual right-bias.

    For example

    for (s <- Left("flower").left) yield s.length // Left(6)

    Continuing the analogy with scala.Option, a LeftProjection declares that Left should be analogous to Some in some code.

    // using Option:
    def interactWithDB(x: Query): Option[Result] =
      try {
        Some(getResultFromDatabase(x))
      } catch {
        case ex => None
      }
    
    // this will only be executed if interactWithDB returns a Some
    val report =
      for (r <- interactWithDB(someQuery)) yield generateReport(r)
    if (report.isDefined)
      send(report)
    else
      log("report not generated, not sure why...")
    // using Either
    def interactWithDB(x: Query): Either[Exception, Result] =
      try {
        Right(getResultFromDatabase(x))
      } catch {
        case ex => Left(ex)
      }
    
    // this will only be executed if interactWithDB returns a Right
    val report =
      for (r <- interactWithDB(someQuery).right) yield generateReport(r)
    if (report.isRight)
      send(report)
    else
      log("report not generated, reason was " + report.left.get)
    Version

    1.0, 11/10/2008

  2. implicit final class MergeableEither [A] extends AnyVal

    Allows use of a merge method to extract values from Either instances regardless of whether they are Left or Right.

    Allows use of a merge method to extract values from Either instances regardless of whether they are Left or Right.

    val l = Left(List(1)): Either[List[Int], Vector[Int]]
    val r = Right(Vector(1)): Either[List[Int], Vector[Int]]
    l.merge: Seq[Int] // List(1)
    r.merge: Seq[Int] // Vector(1)
  3. final case class RightProjection [+A, +B](e: Either[A, B]) extends Product with Serializable

    Projects an Either into a Right.

    Projects an Either into a Right.

    Because Either is already right-biased, this class is not normally needed. (It is retained in the library for now for easy cross-compilation between Scala 2.11 and 2.12.)

    Version

    1.0, 11/10/2008

Value Members

  1. def cond[X, Y](test: Boolean, right: ⇒ Y, left: ⇒ X): Either[X, Y]

    If the condition is satisfied, return the given B in Right, otherwise, return the given A in Left.

    If the condition is satisfied, return the given B in Right, otherwise, return the given A in Left.

    val userInput: String = ...
    Either.cond(
      userInput.forall(_.isDigit) && userInput.size == 10,
      PhoneNumber(userInput),
      "The input (%s) does not look like a phone number".format(userInput)