extensible-effects-1.11.1.0: An Alternative to Monad Transformers

Safe HaskellSafe
LanguageHaskell2010

Control.Eff.Lift

Contents

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

data Lift m v Source #

Lift a Monad m to an effect.

Constructors

Lift (m a) (a -> v) 

Instances

Functor (Lift m) Source # 

Methods

fmap :: (a -> b) -> Lift m a -> Lift m b #

(<$) :: a -> Lift m b -> Lift m a #

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

Lift a Monad to an Effect.

runLift :: (Monad m, Typeable m) => Eff (Lift m :> Void) w -> m w Source #

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

Orphan instances

(MonadBase b m, Typeable (* -> *) m, SetMember ((* -> *) -> * -> *) Lift (Lift m) r) => MonadBase b (Eff r) Source # 

Methods

liftBase :: b α -> Eff r α #

(Typeable (* -> *) m, MonadIO m, SetMember ((* -> *) -> * -> *) Lift (Lift m) r) => MonadIO (Eff r) Source # 

Methods

liftIO :: IO a -> Eff r a #