Safe Haskell | None |
---|---|
Language | Haskell2010 |
The MonadRescue
class, meant for retrieving the success/failure branches
Synopsis
- class MonadRaise m => MonadRescue m where
Documentation
class MonadRaise m => MonadRescue m where Source #
Pull a potential error out of the surrounding context
attempt :: m a -> m (Either (OpenUnion (Errors m)) a) Source #
Attempt some action, exposing the success and error branches
Examples
>>>
:{
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 # | |
MonadRescue Maybe Source # | |
MonadRescue IO Source # | |
MonadRescue (Either (OpenUnion errs)) Source # | |
MonadRescue m => MonadRescue (MaybeT m) Source # | |
(Contains (Errors m) (Errors m), MonadCatch m, MonadRescue m) => MonadRescue (CleanupT m) Source # | |
MonadRescue m => MonadRescue (IdentityT m) Source # | |
(MonadRescue m, Contains (Errors m) errs) => MonadRescue (ExceptT (OpenUnion errs) m) Source # | |
MonadRescue m => MonadRescue (StateT s m) Source # | |
MonadRescue m => MonadRescue (StateT s m) Source # | |
(Monoid w, MonadRescue m) => MonadRescue (WriterT w m) Source # | |
(Monoid w, MonadRescue m) => MonadRescue (WriterT w m) Source # | |
Monad m => MonadRescue (RescueT errs m) Source # | |
MonadRescue m => MonadRescue (ContT r m) Source # | |
MonadRescue m => MonadRescue (ReaderT cfg m) Source # | |
(Monoid w, MonadRescue m) => MonadRescue (RWST r w s m) Source # | |
(Monoid w, MonadRescue m) => MonadRescue (RWST r w s m) Source # | |