Packages

c

scala.util.Either

LeftProjection

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

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)
Source
Either.scala
Version

1.0, 11/10/2008

Linear Supertypes
Serializable, java.io.Serializable, Product, Equals, AnyRef, Any
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. LeftProjection
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. AnyRef
  7. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new LeftProjection(e: Either[A, B])

Value Members

  1. val e: Either[A, B]
  2. def exists(p: (A) ⇒ Boolean): Boolean

    Returns false if Right or returns the result of the application of the given function to the Left value.

    Returns false if Right or returns the result of the application of the given function to the Left value.

    Left(12).left.exists(_ > 10)  // true
    Left(7).left.exists(_ > 10)   // false
    Right(12).left.exists(_ > 10) // false
  3. def filter[Y](p: (A) ⇒ Boolean): Option[Either[A, Y]]

    Returns None if this is a Right or if the given predicate p does not hold for the left value, otherwise, returns a Left.

    Returns None if this is a Right or if the given predicate p does not hold for the left value, otherwise, returns a Left.

    Left(12).left.filter(_ > 10)  // Some(Left(12))
    Left(7).left.filter(_ > 10)   // None
    Right(12).left.filter(_ > 10) // None
  4. def flatMap[BB >: B, X](f: (A) ⇒ Either[X, BB]): Either[X, BB]

    Binds the given function across Left.

    Binds the given function across Left.

    Left(12).left.flatMap(x => Left("scala")) // Left("scala")
    Right(12).left.flatMap(x => Left("scala") // Right(12)
    f

    The function to bind across Left.

  5. def forall(p: (A) ⇒ Boolean): Boolean

    Returns true if Right or returns the result of the application of the given function to the Left value.

    Returns true if Right or returns the result of the application of the given function to the Left value.

    Left(12).left.forall(_ > 10)  // true
    Left(7).left.forall(_ > 10)   // false
    Right(12).left.forall(_ > 10) // true
  6. def foreach[U](f: (A) ⇒ U): Unit

    Executes the given side-effecting function if this is a Left.

    Executes the given side-effecting function if this is a Left.

    Left(12).left.foreach(x => println(x))  // prints "12"
    Right(12).left.foreach(x => println(x)) // doesn't print
    f

    The side-effecting function to execute.

  7. def get: A

    Returns the value from this Left or throws java.util.NoSuchElementException if this is a Right.

    Returns the value from this Left or throws java.util.NoSuchElementException if this is a Right.

    Left(12).left.get // 12
    Right(12).left.get // NoSuchElementException
    Exceptions thrown

    java.util.NoSuchElementException if the projection is scala.util.Right

  8. def getOrElse[AA >: A](or: ⇒ AA): AA

    Returns the value from this Left or the given argument if this is a Right.

    Returns the value from this Left or the given argument if this is a Right.

    Left(12).left.getOrElse(17)  // 12
    Right(12).left.getOrElse(17) // 17
  9. def map[X](f: (A) ⇒ X): Either[X, B]

    Maps the function argument through Left.

    Maps the function argument through Left.

    Left(12).left.map(_ + 2) // Left(14)
    Right[Int, Int](12).left.map(_ + 2) // Right(12)
  10. def toOption: Option[A]

    Returns a Some containing the Left value if it exists or a None if this is a Right.

    Returns a Some containing the Left value if it exists or a None if this is a Right.

    Left(12).left.toOption // Some(12)
    Right(12).left.toOption // None
  11. def toSeq: Seq[A]

    Returns a Seq containing the Left value if it exists or an empty Seq if this is a Right.

    Returns a Seq containing the Left value if it exists or an empty Seq if this is a Right.

    Left(12).left.toSeq // Seq(12)
    Right(12).left.toSeq // Seq()