Either

Option には2つの値 Some と None がある。Some はある種のコンテナで中に別の値を持つことができるけど、None は値を持つことができない。

つまり、エラーが起こったこと自体は None で知らせることができても、どんなエラーなのかはわからないわけだ。そこで Either の登場だ。

Either にも2つの値 Right と Left があって、両方とも中身の値を持つことができる。通常は、正常だった時に Right を、何かエラーがあったときに Left を使う。Either は2つの型パラメータをとる。つまり Either[A, B] で、A は Left の中身の型、B は Right の中身の型だ。

scala> val v1: Either[String, Int] = Right(123)
v1: Either[String,Int] = Right(123)

scala> val v2: Either[String, Int] = Left("abc")
v2: Either[String,Int] = Left(abc)

もちろん、パターンマッチもできる。

scala> v1 match {
     |     case Right(i) => println(i)
     |     case Left(s)  => println(s)
     | }
123