extensible-effects- An Alternative to Monad Transformers

Safe HaskellTrustworthy



Exception-producing and exception-handling effects



newtype Exc e v Source

These are exceptions of the type e. This is akin to the error monad.


Exc e 


Functor (Exc e) 
Typeable (* -> * -> *) Exc 

type Fail = Exc () Source

throwExc :: (Typeable e, Member (Exc e) r) => e -> Eff r a Source

Throw an exception in an effectful computation.

die :: Member Fail r => Eff r a Source

Makes an effect fail, preventing future effects from happening.

runExc :: Typeable e => Eff (Exc e :> r) a -> Eff r (Either e a) Source

Run a computation that might produce an exception.

runFail :: Eff (Fail :> r) a -> Eff r (Maybe a) Source

Runs a failable effect, such that failed computation return Nothing, and Just the return value on success.

catchExc :: (Typeable e, Member (Exc e) r) => Eff r a -> (e -> Eff r a) -> Eff r a Source

Run a computation that might produce exceptions, and give it a way to deal with the exceptions that come up.

onFail Source


:: Eff (Fail :> r) a

The fallible computation.

-> Eff r a

The computation to run on failure.

-> Eff r a 

Add a default value (i.e. failure handler) to a fallible computation. This hides the fact that a failure happened.

rethrowExc :: (Typeable e, Typeable e', Member (Exc e') r) => (e -> e') -> Eff (Exc e :> r) a -> Eff r a Source

Run a computation until it produces an exception, and convert and throw that exception in a new context.

liftEither :: (Typeable e, Member (Exc e) r) => Either e a -> Eff r a Source

Treat Lefts as exceptions and Rights as return values.

liftEitherM :: (Typeable m, Typeable e, Member (Exc e) r, SetMember Lift (Lift m) r) => m (Either e a) -> Eff r a Source

liftEither in a lifted Monad

liftMaybe :: Member Fail r => Maybe a -> Eff r a Source

Lift a maybe into the Fail effect, causing failure if it's Nothing.

ignoreFail :: Eff (Fail :> r) a -> Eff r () Source

Ignores a failure event. Since the event can fail, you cannot inspect its return type, because it has none on failure. To inspect it, use runFail.