MonadError
概要
Monadに対して「エラーを投げる能力」と「エラーをハンドリングする能力」を付与した型クラス MonadError[F[_], E]
E is the type of error contained within F.
F モナド
E エラー型
作用を表す高階型とエラーの型がセットになってモナドエラーインスタンスになる
エラーの型はFの内側でエラーを表す型
前のモナド値を見て後続のモナド値をエラーにするかどうか決定できる
ApplicativeErrorではその値単独でエラーにするかどうかしか決定できない。
attempt[A](fa: F[A]): F[Either[E, A]]
結果をEitherにして実行を試みる
https://gyazo.com/178f9c2db24c9284711d1afb2e3bd630
条件
ensure
F[A]の値を見てエラーにするか判断する能力
def ensure[A](fa: F[A])(e: E)(f: A => Boolean): F[A]
raiseError[A](e: E): F[A]
エラーを発生させる能力
def handleErrorWith[A](fa: F[A])(f: E => F[A]): F[A]
エラー値を普通の値に変換することでエラーをハンドリング
Scala
code:scala
trait MonadError[F_, E] extends MonadF { // Lift an error into the F context:
def raiseErrorA(e: E): FA // Handle an error, potentially recovering from it:
def handleErrorWithA(fa: FA)(f: E => FA): FA // Handle all errors, recovering from them:
def handleErrorA(fa: FA)(f: E => A): FA // Test an instance of F,
// failing if the predicate is not satisfied:
def ensureA(fa: FA)(e: E)(f: A => Boolean): FA }
code:scala