Validation
Validation自体は、以下のようなsealed abstract classで、SuccessとFailureという2つのサブクラスがあります。
sealed abstract class Validation[E, A] extends Product with Serializable
final case class Success[E, A](a: A) extends Validation[E, A]
final case class Failure[E, A](e: E) extends Validation[E, A]
つまり、scala.Eitherやscalaz.\/と同型です。
クラス名から想像がつくように、成功と失敗を表現するのに用いられることが多いですsuccess-failure。
Validationは、Applicativeのインスタンスですが、Monadのインスタンスにはなっていません。
無理やりMonadのインスタンスにすることは不可能ではありませんが、そうすると、そのMonadとApplicativeのインスタンスに整合性がなくなってしましますconsistent-monad-applicative。
success-failure. それ以外の使い方も可能です ↩
consistent-monad-applicative. 型クラスの継承関係やlawの整合性については、別のところで詳細に説明する予定 ↩