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の整合性については、別のところで詳細に説明する予定 ↩