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)
1.0, 11/10/2008
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)
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.
1.0, 11/10/2008
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)