extensible-effects-2.0.1.0: An Alternative to Monad Transformers

Safe HaskellSafe
LanguageHaskell2010

Control.Eff.Lift

Description

Lifting primitive Monad types to effectful computations. We only allow a single Lifted Monad because Monads aren't commutative (e.g. Maybe (IO a) is functionally distinct from IO (Maybe a)).

Synopsis

Documentation

newtype Lift m a Source #

Lifting: emulating monad transformers

Constructors

Lift (m a) 

lift :: SetMember Lift (Lift m) r => m a -> Eff r a Source #

We make the Lift layer to be unique, using SetMember

runLift :: Monad m => Eff '[Lift m] w -> m w Source #

The handler of Lift requests. It is meant to be terminal: we only allow a single Lifted Monad.