The Either
type is an ADT that represents a value of either a Left
type or a Right
type. A simplified definition of Either
would be the following:
sealed trait Either[A, B] case class Left[A, B](value: A) extends Either[A, B] case class Right[A, B](value: B) extends Either[A, B]
When you instantiate a Right
type, you need to provide a value of a B
type, and when you instantiate aLeft
type, you need to provide a value of anA
type. Therefore, Either[A, B]
can either hold a value of typeA
or a value of typeB
.
The following code shows an example of such a usage that you can type in a new Scala worksheet:
def divide(x: Double, y: Double): Either[String, Double] = if (y == 0) Left(s"$x cannot be divided by zero") else Right(x / y) divide(6, 3) // res0: Either[String,Double] = Right(2.0) divide(6, 0) // res1: Either[String,Double] = Left(6.0 cannot be divided by zero)
The divide
function returns either a string or a double:
- If the function cannot compute a value, it returns an error
String...