| Safe Haskell | Safe-Infered |
|---|
Data.EitherR
Contents
Description
This modules provides newtypes which flip the type variables of Either
and EitherT to access the symmetric monad over the opposite type variable.
This module provides the following simple benefits to the casual user:
- A type-class free alternative to
MonadError - No
UndecidableInstancesor any other extensions, for that matter - A more powerful
catchEstatement that allows you to change the type of error value returned
More advanced users can take advantage of the fact that EitherR and
EitherRT define an entirely symmetric "success monad" where
error-handling computations are the default and successful results terminate
the monad. This allows you to chain error-handlers and pass around values
other than exceptions until you can finally recover from the error:
runEitherRT $ do
e2 <- ioExceptionHandler e1
bool <- arithmeticExceptionhandler e2
when bool $ lift $ putStrLn "DEBUG: Arithmetic handler did something"
If any of the above error handlers succeed, no other handlers are tried.
- newtype EitherR r e = EitherR {
- runEitherR :: Either e r
- succeed :: r -> EitherR r e
- throwE :: e -> Either e r
- catchE :: Either a r -> (a -> Either b r) -> Either b r
- handleE :: (a -> Either b r) -> Either a r -> Either b r
- fmapL :: (a -> b) -> Either a r -> Either b r
- newtype EitherRT r m e = EitherRT {
- runEitherRT :: EitherT e m r
- succeedT :: Monad m => r -> EitherRT r m e
- throwT :: Monad m => e -> EitherT e m r
- catchT :: Monad m => EitherT a m r -> (a -> EitherT b m r) -> EitherT b m r
- handleT :: Monad m => (a -> EitherT b m r) -> EitherT a m r -> EitherT b m r
- fmapLT :: Monad m => (a -> b) -> EitherT a m r -> EitherT b m r
Documentation
If "Either e r" is the error monad, then "EitherR r e" is the
corresponding success monad, where:
Constructors
| EitherR | |
Fields
| |
Operations in the EitherR monad
Conversions to the Either monad
EitherRT
EitherR converted into a monad transformer
Constructors
| EitherRT | |
Fields
| |