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