それは、最小の驚きの原則に帰着するだけだと思います。成功または失敗をエンコードするためにを使用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