effet-0.1.0.0: An Effect System based on Type Classes
Copyright(c) Michael Szvetits 2020
LicenseBSD3 (see the file LICENSE)
Maintainertypedbyte@qualified.name
Stabilitystable
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Control.Effect.Embed

Description

The embed effect for integrating arbitrary monads into the effect system.

Synopsis

Embed Effect

class Monad m => Embed n m where Source #

An effect that integrates a monad n into the computation m.

Methods

embed :: n a -> m a Source #

Monadic actions in n can be lifted into m via embed.

embed is like liftIO, but not limited to IO. In fact, liftIO can be realized using embed by specializing n to IO.

Instances

Instances details
Monad m => Embed m m Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: m a -> m a Source #

Lift (Embed n) t m => Embed n (Via eff t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Via eff t m a Source #

Handle (Embed n) t m => Embed n (Via (Embed n) t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Via (Embed n) t m a Source #

Embed t m => Embed n (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Transformation n t m a Source #

Interpretations

data Transformation n t m a Source #

The transformation interpreter of the embed effect. This type implements the Embed type class by transforming the integrated monad n into another integrated monad t via natural transformation.

When interpreting the effect, you usually don't interact with this type directly, but instead use one of its corresponding interpretation functions.

Instances

Instances details
MonadBase b m => MonadBase b (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

liftBase :: b α -> Transformation n t m α #

MonadBaseControl b m => MonadBaseControl b (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Associated Types

type StM (Transformation n t m) a #

Methods

liftBaseWith :: (RunInBase (Transformation n t m) b -> b a) -> Transformation n t m a #

restoreM :: StM (Transformation n t m) a -> Transformation n t m a #

Embed t m => Embed n (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

embed :: n a -> Transformation n t m a Source #

MonadTrans (Transformation n t) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

lift :: Monad m => m a -> Transformation n t m a #

MonadTransControl (Transformation n t) Source # 
Instance details

Defined in Control.Effect.Embed

Associated Types

type StT (Transformation n t) a #

Methods

liftWith :: Monad m => (Run (Transformation n t) -> m a) -> Transformation n t m a #

restoreT :: Monad m => m (StT (Transformation n t) a) -> Transformation n t m a #

Monad m => Monad (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

(>>=) :: Transformation n t m a -> (a -> Transformation n t m b) -> Transformation n t m b #

(>>) :: Transformation n t m a -> Transformation n t m b -> Transformation n t m b #

return :: a -> Transformation n t m a #

Functor m => Functor (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

fmap :: (a -> b) -> Transformation n t m a -> Transformation n t m b #

(<$) :: a -> Transformation n t m b -> Transformation n t m a #

Applicative m => Applicative (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

pure :: a -> Transformation n t m a #

(<*>) :: Transformation n t m (a -> b) -> Transformation n t m a -> Transformation n t m b #

liftA2 :: (a -> b -> c) -> Transformation n t m a -> Transformation n t m b -> Transformation n t m c #

(*>) :: Transformation n t m a -> Transformation n t m b -> Transformation n t m b #

(<*) :: Transformation n t m a -> Transformation n t m b -> Transformation n t m a #

MonadIO m => MonadIO (Transformation n t m) Source # 
Instance details

Defined in Control.Effect.Embed

Methods

liftIO :: IO a -> Transformation n t m a #

type StT (Transformation n t) a Source # 
Instance details

Defined in Control.Effect.Embed

type StT (Transformation n t) a
type StM (Transformation n t m) a Source # 
Instance details

Defined in Control.Effect.Embed

type StM (Transformation n t m) a

runEmbed Source #

Arguments

:: (forall b. n b -> t b)

The natural transformation from monad n to monad t.

-> (Embed n `Via` Transformation n t) m a

The program whose embed effect should be handled.

-> m a

The program with its embed effect handled.

Runs the embed effect by transforming the integrated monad n into another integrated monad t.