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. 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)
  2. 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 Either instances - 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)
    Annotations
    @deprecated
    Deprecated

    (Since version 2.12.0) use swap instead

    Version

    1.0, 11/10/2008

  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.

    This allows for-comprehensions over Either instances - for example

    for (s <- Right("flower").right) yield s.length // Right(6)

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

    Analogous to LeftProjection, see example usage in its documentation above.

    Annotations
    @deprecated
    Deprecated

    (Since version 2.12.0) Either is now right-biased

    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)