heftia-0.1.0.0: Higher-order version of Freer.
Copyright(c) 2023 Yamada Ryo
LicenseMPL-2.0 (see the file LICENSE)
Maintainerymdfield@outlook.jp
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Control.Effect.Freer

Description

A Freer carrier that can be used as a handler for effect systems based on classy-effects.

Synopsis

Documentation

newtype FreerUnion (fr :: Instruction -> (Type -> Type) -> Type -> Type) u (es :: [Instruction]) f a Source #

A data type that wraps Freer with any encoding to become an instance of SendIns based on the liftInsT from the TransFreer type class.

Constructors

FreerUnion 

Fields

Instances

Instances details
SendIns e (FreerUnionForSend (IsMember e es) fr u es f) => SendIns e (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

sendIns :: e a -> FreerUnion fr u es f a #

Foldable (fr (u es) f) => Foldable (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

fold :: Monoid m => FreerUnion fr u es f m -> m #

foldMap :: Monoid m => (a -> m) -> FreerUnion fr u es f a -> m #

foldMap' :: Monoid m => (a -> m) -> FreerUnion fr u es f a -> m #

foldr :: (a -> b -> b) -> b -> FreerUnion fr u es f a -> b #

foldr' :: (a -> b -> b) -> b -> FreerUnion fr u es f a -> b #

foldl :: (b -> a -> b) -> b -> FreerUnion fr u es f a -> b #

foldl' :: (b -> a -> b) -> b -> FreerUnion fr u es f a -> b #

foldr1 :: (a -> a -> a) -> FreerUnion fr u es f a -> a #

foldl1 :: (a -> a -> a) -> FreerUnion fr u es f a -> a #

toList :: FreerUnion fr u es f a -> [a] #

null :: FreerUnion fr u es f a -> Bool #

length :: FreerUnion fr u es f a -> Int #

elem :: Eq a => a -> FreerUnion fr u es f a -> Bool #

maximum :: Ord a => FreerUnion fr u es f a -> a #

minimum :: Ord a => FreerUnion fr u es f a -> a #

sum :: Num a => FreerUnion fr u es f a -> a #

product :: Num a => FreerUnion fr u es f a -> a #

Traversable (fr (u es) f) => Traversable (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

traverse :: Applicative f0 => (a -> f0 b) -> FreerUnion fr u es f a -> f0 (FreerUnion fr u es f b) #

sequenceA :: Applicative f0 => FreerUnion fr u es f (f0 a) -> f0 (FreerUnion fr u es f a) #

mapM :: Monad m => (a -> m b) -> FreerUnion fr u es f a -> m (FreerUnion fr u es f b) #

sequence :: Monad m => FreerUnion fr u es f (m a) -> m (FreerUnion fr u es f a) #

Alternative (fr (u es) f) => Alternative (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

empty :: FreerUnion fr u es f a #

(<|>) :: FreerUnion fr u es f a -> FreerUnion fr u es f a -> FreerUnion fr u es f a #

some :: FreerUnion fr u es f a -> FreerUnion fr u es f [a] #

many :: FreerUnion fr u es f a -> FreerUnion fr u es f [a] #

Applicative (fr (u es) f) => Applicative (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

pure :: a -> FreerUnion fr u es f a #

(<*>) :: FreerUnion fr u es f (a -> b) -> FreerUnion fr u es f a -> FreerUnion fr u es f b #

liftA2 :: (a -> b -> c) -> FreerUnion fr u es f a -> FreerUnion fr u es f b -> FreerUnion fr u es f c #

(*>) :: FreerUnion fr u es f a -> FreerUnion fr u es f b -> FreerUnion fr u es f b #

(<*) :: FreerUnion fr u es f a -> FreerUnion fr u es f b -> FreerUnion fr u es f a #

Functor (fr (u es) f) => Functor (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

fmap :: (a -> b) -> FreerUnion fr u es f a -> FreerUnion fr u es f b #

(<$) :: a -> FreerUnion fr u es f b -> FreerUnion fr u es f a #

Monad (fr (u es) f) => Monad (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

(>>=) :: FreerUnion fr u es f a -> (a -> FreerUnion fr u es f b) -> FreerUnion fr u es f b #

(>>) :: FreerUnion fr u es f a -> FreerUnion fr u es f b -> FreerUnion fr u es f b #

return :: a -> FreerUnion fr u es f a #

MonadPlus (fr (u es) f) => MonadPlus (FreerUnion fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

mzero :: FreerUnion fr u es f a #

mplus :: FreerUnion fr u es f a -> FreerUnion fr u es f a -> FreerUnion fr u es f a #

type FreerEffects fr u es f = EffectsVia EffectDataHandler (FreerUnion fr u es f) Source #

A Freer carrier that can be used as a handler for effect systems based on classy-effects.

unFreerEffects :: FreerEffects fr u es f ~> fr (u es) f Source #

Unwrap the FreerEffects wrapper.

freerEffects :: fr (u es) f ~> FreerEffects fr u es f Source #

Wrap with FreerEffects.

newtype FreerUnionForSend handleHere fr u es f a Source #

A wrapper data type designed to induce instance resolution to delegate the search for effect classes to a lower carrier f even when there are no target effect classes in the effect class list es.

When a target effect class exists within es, handleHere is induced to be 'True; when it doesn't exist, it's induced to be 'False.

Constructors

FreerUnionForSend 

Fields

Instances

Instances details
(TransFreer c fr, SendIns e f, c f) => SendIns e (FreerUnionForSend 'False fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

sendIns :: e a -> FreerUnionForSend 'False fr u es f a #

(TransFreer c fr, Union u, Member u e es) => SendIns e (FreerUnionForSend 'True fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

sendIns :: e a -> FreerUnionForSend 'True fr u es f a #

Foldable (fr (u es) f) => Foldable (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

fold :: Monoid m => FreerUnionForSend handleHere fr u es f m -> m #

foldMap :: Monoid m => (a -> m) -> FreerUnionForSend handleHere fr u es f a -> m #

foldMap' :: Monoid m => (a -> m) -> FreerUnionForSend handleHere fr u es f a -> m #

foldr :: (a -> b -> b) -> b -> FreerUnionForSend handleHere fr u es f a -> b #

foldr' :: (a -> b -> b) -> b -> FreerUnionForSend handleHere fr u es f a -> b #

foldl :: (b -> a -> b) -> b -> FreerUnionForSend handleHere fr u es f a -> b #

foldl' :: (b -> a -> b) -> b -> FreerUnionForSend handleHere fr u es f a -> b #

foldr1 :: (a -> a -> a) -> FreerUnionForSend handleHere fr u es f a -> a #

foldl1 :: (a -> a -> a) -> FreerUnionForSend handleHere fr u es f a -> a #

toList :: FreerUnionForSend handleHere fr u es f a -> [a] #

null :: FreerUnionForSend handleHere fr u es f a -> Bool #

length :: FreerUnionForSend handleHere fr u es f a -> Int #

elem :: Eq a => a -> FreerUnionForSend handleHere fr u es f a -> Bool #

maximum :: Ord a => FreerUnionForSend handleHere fr u es f a -> a #

minimum :: Ord a => FreerUnionForSend handleHere fr u es f a -> a #

sum :: Num a => FreerUnionForSend handleHere fr u es f a -> a #

product :: Num a => FreerUnionForSend handleHere fr u es f a -> a #

Traversable (fr (u es) f) => Traversable (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

traverse :: Applicative f0 => (a -> f0 b) -> FreerUnionForSend handleHere fr u es f a -> f0 (FreerUnionForSend handleHere fr u es f b) #

sequenceA :: Applicative f0 => FreerUnionForSend handleHere fr u es f (f0 a) -> f0 (FreerUnionForSend handleHere fr u es f a) #

mapM :: Monad m => (a -> m b) -> FreerUnionForSend handleHere fr u es f a -> m (FreerUnionForSend handleHere fr u es f b) #

sequence :: Monad m => FreerUnionForSend handleHere fr u es f (m a) -> m (FreerUnionForSend handleHere fr u es f a) #

Alternative (fr (u es) f) => Alternative (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

empty :: FreerUnionForSend handleHere fr u es f a #

(<|>) :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f a #

some :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f [a] #

many :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f [a] #

Applicative (fr (u es) f) => Applicative (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

pure :: a -> FreerUnionForSend handleHere fr u es f a #

(<*>) :: FreerUnionForSend handleHere fr u es f (a -> b) -> FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b #

liftA2 :: (a -> b -> c) -> FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b -> FreerUnionForSend handleHere fr u es f c #

(*>) :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b -> FreerUnionForSend handleHere fr u es f b #

(<*) :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b -> FreerUnionForSend handleHere fr u es f a #

Functor (fr (u es) f) => Functor (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

fmap :: (a -> b) -> FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b #

(<$) :: a -> FreerUnionForSend handleHere fr u es f b -> FreerUnionForSend handleHere fr u es f a #

Monad (fr (u es) f) => Monad (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

(>>=) :: FreerUnionForSend handleHere fr u es f a -> (a -> FreerUnionForSend handleHere fr u es f b) -> FreerUnionForSend handleHere fr u es f b #

(>>) :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f b -> FreerUnionForSend handleHere fr u es f b #

return :: a -> FreerUnionForSend handleHere fr u es f a #

MonadPlus (fr (u es) f) => MonadPlus (FreerUnionForSend handleHere fr u es f) Source # 
Instance details

Defined in Control.Effect.Freer

Methods

mzero :: FreerUnionForSend handleHere fr u es f a #

mplus :: FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f a -> FreerUnionForSend handleHere fr u es f a #

interpret :: (TransFreer c fr, Union u, c f) => (e ~> FreerEffects fr u es f) -> FreerEffects fr u (e ': es) f ~> FreerEffects fr u es f Source #

Interpret the leading effect class in the effect class list.

interpretT :: forall t fr u e es f. (MonadTransFreer fr, Union u, MonadTrans t, Monad f, Monad (t (FreerEffects fr u es f))) => (e ~> t (FreerEffects fr u es f)) -> FreerEffects fr u (e ': es) f ~> t (FreerEffects fr u es f) Source #

Interpret the leading effect class in the effect class list using a monad transformer.

interpretK :: (MonadTransFreer fr, Union u, Monad f) => (a -> FreerEffects fr u es f r) -> (forall x. (x -> FreerEffects fr u es f r) -> e x -> FreerEffects fr u es f r) -> FreerEffects fr u (e ': es) f a -> FreerEffects fr u es f r Source #

Interpret the leading effect class in the effect class list using a delimited continuation.

interpretContT :: forall r fr u e es f. (MonadTransFreer fr, Union u, Monad f) => (e ~> ContT r (FreerEffects fr u es f)) -> FreerEffects fr u (e ': es) f ~> ContT r (FreerEffects fr u es f) Source #

Interpret the leading effect class in the effect class list using a continuation monad transformer.

interpretAll :: (TransFreer c fr, Union u, c f, c g) => (f ~> g) -> (u es ~> g) -> (e ~> g) -> FreerEffects fr u (e ': es) f ~> g Source #

Interpret not only the leading effect class but also all the remaining effect classes and the underlying carrier simultaneously, transforming them into any carrier g.

reinterpret :: (TransFreer c fr, Union u, c f) => (e ~> FreerEffects fr u (e ': es) f) -> FreerEffects fr u (e ': es) f ~> FreerEffects fr u (e ': es) f Source #

Reinterpret the leading effect class in the effect class list.

transformAll :: (TransFreer c fr, Union u, Union u', c f) => (u es ~> u' es') -> FreerEffects fr u es f ~> FreerEffects fr u' es' f Source #

Transform all effect classes in the effect class list into another union of effect classes.

transform :: forall e' e fr u r f c. (TransFreer c fr, Union u, c f) => (e ~> e') -> FreerEffects fr u (e ': r) f ~> FreerEffects fr u (e' ': r) f Source #

Transform the leading effect class in the effect class list into another effect class.

untag :: forall tag e fr u r f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (Tag e tag ': r) f ~> FreerEffects fr u (e ': r) f Source #

Remove the tag attached to the effect class.

interpose :: forall e fr u es f c. (TransFreer c fr, Union u, Member u e es, c f) => (e ~> FreerEffects fr u es f) -> FreerEffects fr u es f ~> FreerEffects fr u es f Source #

Interpose the effect class that exists within the effect class list.

interposeT :: forall e t fr u es m. (MonadTransFreer fr, Union u, Member u e es, Monad m, MonadTrans t, forall m1 m2 x. Coercible m1 m2 => Coercible (t m1 x) (t m2 x), Monad (t (fr (u es) m))) => (e ~> t (FreerEffects fr u es m)) -> FreerEffects fr u es m ~> t (FreerEffects fr u es m) Source #

Interpose the effect class that exists within the effect class list using a monad transformer.

interposeAll :: forall e g fr u es f c. (TransFreer c fr, Union u, Member u e es, c f, c g) => (f ~> g) -> (u es ~> g) -> (e ~> g) -> FreerEffects fr u es f ~> g Source #

Transform all other effect classes in the effect class list and the underlying carrier, along with the effect class that exists within the effect class list, into any carrier g.

interposeK :: (MonadTransFreer fr, Union u, Member u e es, Monad m) => (a -> FreerEffects fr u es m r) -> (forall x. (x -> FreerEffects fr u es m r) -> e x -> FreerEffects fr u es m r) -> FreerEffects fr u es m a -> FreerEffects fr u es m r Source #

Interpose the effect class that exists within the effect class list using a delimited continuation.

interposeContT :: forall e r fr u es m. (MonadTransFreer fr, Union u, Member u e es, Monad m) => (e ~> ContT r (FreerEffects fr u es m)) -> FreerEffects fr u es m ~> ContT r (FreerEffects fr u es m) Source #

Interpose the effect class that exists within the effect class list using a continuation monad transformer.

intercept :: forall e fr u es f c. (TransFreer c fr, Union u, Member u e es, c f) => (e ~> e) -> FreerEffects fr u es f ~> FreerEffects fr u es f Source #

Transform the effect of the effect class that exists within the effect class list.

raise :: forall e es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u es f ~> FreerEffects fr u (e ': es) f Source #

Insert an arbitrary effect class at the beginning of the effect class list.

raise2 :: forall e1 e2 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u es f ~> FreerEffects fr u (e1 ': (e2 ': es)) f Source #

Insert two arbitrary effect classes at the beginning of the effect class list.

raise3 :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u es f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f Source #

Insert three arbitrary effect classes at the beginning of the effect class list.

raise4 :: forall e1 e2 e3 e4 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u es f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source #

Insert four arbitrary effect classes at the beginning of the effect class list.

raiseUnder :: forall e1 e2 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': es) f ~> FreerEffects fr u (e1 ': (e2 ': es)) f Source #

Insert an arbitrary effect class below the leading effect class in the effect class list.

raiseUnder2 :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': es)) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f Source #

Insert an arbitrary effect class below the first two leading effect classes in the effect class list.

raiseUnder3 :: forall e1 e2 e3 e4 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source #

Insert an arbitrary effect class below the first three leading effect classes in the effect class list.

raise2Under :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': es) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f Source #

Insert two arbitrary effect classes below the leading effect class in the effect class list.

raise2Under2 :: forall e1 e2 e3 e4 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': es)) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source #

Insert two arbitrary effect classes below the first two leading effect classes in the effect class list.

raise3Under :: forall e1 e2 e3 e4 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': es) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source #

Inserts three arbitrary effect classes under the top effect class in the effect class list.

flipFreer :: forall e1 e2 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': es)) f ~> FreerEffects fr u (e2 ': (e1 ': es)) f Source #

Swaps the top two effect classes in the effect class list.

flipFreer3 :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (e3 ': (e2 ': (e1 ': es))) f Source #

Reverses the order of the top three effect classes in the effect class list.

flipFreerUnder :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (e1 ': (e3 ': (e2 ': es))) f Source #

Swaps the second and third effect classes from the top in the effect class list.

rotate3 :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (e2 ': (e3 ': (e1 ': es))) f Source #

Rotates the top three effect classes in the effect class list to the left.

rotate3' :: forall e1 e2 e3 es fr u f c. (TransFreer c fr, Union u, c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (e3 ': (e1 ': (e2 ': es))) f Source #

Rotates the top three effect classes in the effect class list to the left twice.

bundle2 :: forall e1 e2 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (e1 ': (e2 ': es)) f ~> FreerEffects fr u (u' '[e1, e2] ': es) f Source #

Bundles the top two effect classes in the effect class list into any open union.

bundle3 :: forall e1 e2 e3 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f ~> FreerEffects fr u (u' '[e1, e2, e3] ': es) f Source #

Bundles the top three effect classes in the effect class list into any open union.

bundle4 :: forall e1 e2 e3 e4 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f ~> FreerEffects fr u (u' '[e1, e2, e3, e4] ': es) f Source #

Bundles the top four effect classes in the effect class list into any open union.

unbundle2 :: forall e1 e2 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (u' '[e1, e2] ': es) f ~> FreerEffects fr u (e1 ': (e2 ': es)) f Source #

Expands the open union at the top of the effect class list.

unbundle3 :: forall e1 e2 e3 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (u' '[e1, e2, e3] ': es) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': es))) f Source #

Expands the open union at the top of the effect class list.

unbundle4 :: forall e1 e2 e3 e4 es fr u f c u'. (TransFreer c fr, Union u, Union u', c f) => FreerEffects fr u (u' '[e1, e2, e3, e4] ': es) f ~> FreerEffects fr u (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source #

Expands the open union at the top of the effect class list.

hoistFreerEffects :: (TransFreer c fr, c f, c g) => (f ~> g) -> FreerEffects fr u es f ~> FreerEffects fr u es g Source #

Transforms the lower carrier.

Warning: The given natural transformation must be a monad morphism (see https://hackage.haskell.org/package/mmorph-1.2.0/docs/Control-Monad-Morph.html). If not, the result will be ill-behaved.

lowerToIns :: (TransFreer c fr, c g, c (f + g), Union u) => FreerEffects fr u es (f + g) ~> FreerEffects fr u (f ': es) g Source #

Converts the lower carrier to an instruction.

insToLower :: (TransFreer c fr, c (f + g), c g, Union u) => FreerEffects fr u (f ': es) g ~> FreerEffects fr u es (f + g) Source #

Converts the instruction to the lower carrier.

interpretLower :: (TransFreer c fr, c f, c g) => (f ~> FreerEffects fr u es g) -> FreerEffects fr u es f ~> FreerEffects fr u es g Source #

Interprets the lower carrier.

Warning: The given natural transformation must be a monad morphism (see https://hackage.haskell.org/package/mmorph-1.2.0/docs/Control-Monad-Morph.html). If not, the result will be ill-behaved.

overFreerEffects :: (fr (u es) f a -> fr' (u' es') g b) -> FreerEffects fr u es f a -> FreerEffects fr' u' es' g b Source #

Accesses the inside of the FreerEffects wrapper.

interpreted :: (TransFreer c fr, c f, Union u) => FreerEffects fr u '[] f ~> f Source #

Drops a Freer with no effect classes to interpret to the lower carrier.

splitFreerEffects :: (TransFreer c fr', TransFreer c fr, c f, c (FreerEffects fr u es f), Union u) => FreerEffects fr u (e ': es) f ~> fr' e (FreerEffects fr u es f) Source #

Splits the Freer into the lower carrier.

subsume :: (TransFreer c fr, SendIns e (FreerEffects fr u es f), Union u, c f) => FreerEffects fr u (e ': es) f ~> FreerEffects fr u es f Source #

Transfer the effect to the underlying level.

subsumeLower :: (TransFreer c fr, SendIns e f, Union u, c f) => FreerEffects fr u (e ': es) f ~> FreerEffects fr u es f Source #

Transfer the effect to the lower carrier.

liftLower :: (TransFreer c fr, c f) => f ~> FreerEffects fr u es f Source #

Lifts the lower carrier.

runIO :: MonadIO m => Fre (IO ': es) m ~> Fre es m Source #

Embeds an IO action into a lower carrier that is a MonadIO.

runInterpret :: (TransFreer c fr, c f) => (u es ~> f) -> FreerEffects fr u es f ~> f Source #

Interprets all effects in the effect class list at once.

runFreerEffects :: (TransFreer c fr, c f, Union u) => FreerEffects fr u '[f] f ~> f Source #

Drops the Freer to the lower carrier.

type Fre es f = FreerEffects FreerChurchT ExtensibleUnion es f Source #

A type synonym for commonly used Monad Freer.

type (<|) e es = Member ExtensibleUnion e es Source #

An operator representing the membership relationship of the effect class list.