rescue-0.2.0: 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

Methods

attempt :: m a -> m (Either (OpenUnion (Errors 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"
Instances
MonadRescue [] Source # 
Instance details

Defined in Control.Monad.Rescue.Class

Methods

attempt :: [a] -> [Either (OpenUnion (Errors [])) 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 (OpenUnion (Errors 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 (OpenUnion (Errors (Either (OpenUnion errs)))) a) Source #

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

Defined in Control.Monad.Rescue.Class

Methods

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

(Contains (Errors m) (Errors m), MonadCatch m, MonadRescue m) => MonadRescue (CleanupT m) Source # 
Instance details

Defined in Control.Monad.Trans.Cleanup.Types

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 (OpenUnion (Errors (ExceptT (OpenUnion errs) 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 (OpenUnion (Errors (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 (OpenUnion (Errors (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 (OpenUnion (Errors (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 (OpenUnion (Errors (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 (OpenUnion (Errors (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 (OpenUnion (Errors (ContT r 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 (OpenUnion (Errors (ReaderT cfg 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 (OpenUnion (Errors (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 (OpenUnion (Errors (RWST r w s m))) a) Source #