それは、最小の驚きの原則に帰着するだけだと思います。成功または失敗をエンコードするためにを使用Eitherすることは、明らかに人々が行うことですが、 の唯一の使用法ではありませんEither。Right実際、成功したりLeft失敗したりする理由は、伝統以外にはあまりありません。上記の adelbertc のコメントにあるように、scalaz にはValidationこれを具体的にエンコードするものがあります。
上記の POLA の主張をさらに正当化するには、次のコードを使用します。
def foo(): Either[Int, Int] = Right(1)
def bar(j: Int): Either[Int, Int] = Left(1)
def baz(z: Int): Either[Int, Int] = Right(3)
// Result is Left(1)
for (a <- foo().right; b <- bar(a).right; c <- baz(b).right) yield c
.right式で射影を使用しているため、これはコンパイルされforます。ここLeft(1)でbarは失敗のケースであり、それが結果EitherですRight。上記のコードは.right、次のような式のプロジェクションなしでコンパイルされます。
for (a <- foo(); b <- bar(a); c <- baz(b)) yield c
コードで単に「どちらか一方」の型を使用した場合、(1) これがコンパイルされるという事実と、(2) が返され、実行されないように見えるEitherという事実に驚かれることでしょう。Left(1)baz
要約すると、成功または失敗をエンコードするValidationために使用する場合に使用します。Either