module Ribosome.Control.Monad.Error(
  recoverAs,
  recoveryFor,
) where

import Control.Monad.Error.Class (MonadError(catchError))

recoveryFor :: MonadError e m => m a -> m a -> m a
recoveryFor :: m a -> m a -> m a
recoveryFor = (m a -> (e -> m a) -> m a) -> (e -> m a) -> m a -> m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip m a -> (e -> m a) -> m a
forall e (m :: * -> *) a.
MonadError e m =>
m a -> (e -> m a) -> m a
catchError ((e -> m a) -> m a -> m a)
-> (m a -> e -> m a) -> m a -> m a -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m a -> e -> m a
forall a b. a -> b -> a
const

recoverAs :: MonadError e m => m a -> m a -> m a
recoverAs :: m a -> m a -> m a
recoverAs = (m a -> m a -> m a) -> m a -> m a -> m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip m a -> m a -> m a
forall e (m :: * -> *) a. MonadError e m => m a -> m a -> m a
recoveryFor