rescue-0.4.2.1: More understandable exceptions
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Rescue.Class

Description

The MonadRescue class, meant for retrieving the success/failure branches

Synopsis

Documentation

class MonadRaise m => MonadRescue m where Source #

Pull a potential error out of the surrounding context NOTE that the target m may not even be aware of Raise/Rescue. It's an escape to the "normal" world

Methods

attempt :: m a -> m (Either (ErrorCase m) a) Source #

Attempt some action, exposing the success and error branches

Examples

Expand
>>> :{
  goesBoom :: Int -> Rescue '[FooErr, BarErr] Int
  goesBoom x =
    if x > 50
      then return x
      else raise FooErr
 :}
>>> runRescue . attempt $ goesBoom 42
Right (Left (Identity FooErr))

Where Identity fooErr is the selection of the OpenUnion. In practice you would handle the OpenUnion like so:

>>> let handleErr = catchesOpenUnion (show, show)
>>> let x = attempt (goesBoom 42) >>= pure . either handleErr show
>>> runRescue x
Right "FooErr"

Where Identity FooErr is the selection of the OpenUnion.

Instances

Instances details
MonadRescue [] Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: [a] -> [Either (ErrorCase []) a] Source #

MonadRescue Maybe Source # 
Instance details

Defined in Control.Monad.Rescue.Class

MonadRescue IO Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: IO a -> IO (Either (ErrorCase IO) a) Source #

MonadRescue (Either (OpenUnion errs)) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: Either (OpenUnion errs) a -> Either (OpenUnion errs) (Either (ErrorCase (Either (OpenUnion errs))) a) Source #

(MonadRescue m, IsMember () (Errors m), Contains (Errors m) (Errors m)) => MonadRescue (MaybeT m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: MaybeT m a -> MaybeT m (Either (ErrorCase (MaybeT m)) a) Source #

(MonadRescue m, MonadCatch m, CheckErrors m, Contains (Errors m) (SomeException ': Errors m)) => MonadRescue (CleanupT m) Source # 
Instance details

Defined in Control.Monad.Trans.Cleanup.Types

Methods

attempt :: CleanupT m a -> CleanupT m (Either (ErrorCase (CleanupT m)) a) Source #

MonadRescue m => MonadRescue (IdentityT m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

(MonadRescue m, Contains (Errors m) errs) => MonadRescue (ExceptT (OpenUnion errs) m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: ExceptT (OpenUnion errs) m a -> ExceptT (OpenUnion errs) m (Either (ErrorCase (ExceptT (OpenUnion errs) m)) a) Source #

MonadRescue m => MonadRescue (ReaderT cfg m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: ReaderT cfg m a -> ReaderT cfg m (Either (ErrorCase (ReaderT cfg m)) a) Source #

MonadRescue m => MonadRescue (StateT s m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: StateT s m a -> StateT s m (Either (ErrorCase (StateT s m)) a) Source #

MonadRescue m => MonadRescue (StateT s m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: StateT s m a -> StateT s m (Either (ErrorCase (StateT s m)) a) Source #

(Monoid w, MonadRescue m) => MonadRescue (WriterT w m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: WriterT w m a -> WriterT w m (Either (ErrorCase (WriterT w m)) a) Source #

(Monoid w, MonadRescue m) => MonadRescue (WriterT w m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: WriterT w m a -> WriterT w m (Either (ErrorCase (WriterT w m)) a) Source #

Monad m => MonadRescue (RescueT errs m) Source # 
Instance details

Defined in Control.Monad.Trans.Rescue.Types

Methods

attempt :: RescueT errs m a -> RescueT errs m (Either (ErrorCase (RescueT errs m)) a) Source #

MonadRescue m => MonadRescue (ContT r m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: ContT r m a -> ContT r m (Either (ErrorCase (ContT r m)) a) Source #

(Monoid w, MonadRescue m) => MonadRescue (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: RWST r w s m a -> RWST r w s m (Either (ErrorCase (RWST r w s m)) a) Source #

(Monoid w, MonadRescue m) => MonadRescue (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: RWST r w s m a -> RWST r w s m (Either (ErrorCase (RWST r w s m)) a) Source #