heftia-0.3.1.0: higher-order effects done right
Copyright(c) 2023-2024 Yamada Ryo
LicenseMPL-2.0 (see the file LICENSE)
Maintainerymdfield@outlook.jp
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Control.Effect.Hefty

Description

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

Synopsis

Documentation

type Eff u fr ehs efs = Hefty fr (EffUnion u ehs efs) Source #

A common type for representing first-order and higher-order extensible effectful programs that can issue effects belonging to the specified list of effect classes.

type Effectful u fr eh ef = Eff u fr (UH u eh) (U u ef) Source #

A common type for representing first-order and higher-order extensible effectful programs that can issue effects belonging to the specified sum of effect classes.

newtype EffUnion (u :: [SigClass] -> SigClass) ehs efs f a Source #

A common wrapper data type for representing first-order and higher-order extensible effect union.

Constructors

EffUnion 

Fields

Instances

Instances details
(MemberRec u (key ##> e) ehs, (key ##> e) ~ FromJust (Lookup key ehs)) => InjectSigBy (key :: k) e (EffUnion u ehs efs) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectSigBy :: forall (f :: Type -> Type). e f ~> EffUnion u ehs efs f Source #

(MemberRec u (LiftIns (key #> e)) efs, LiftIns (key #> e) ~ FromJust (Lookup key efs)) => InjectInsBy (key :: k) e (EffUnion u ehs efs f) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectInsBy :: e ~> EffUnion u ehs efs f Source #

MemberRec u e ehs => InjectSig e (EffUnion u ehs efs) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectSig :: forall (f :: Type -> Type). e f ~> EffUnion u ehs efs f Source #

MemberRec u (LiftIns e) efs => InjectIns e (EffUnion u ehs efs f) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

injectIns :: e ~> EffUnion u ehs efs f Source #

HFunctor (u ehs) => HFunctor (EffUnion u ehs efs) Source # 
Instance details

Defined in Control.Effect.Hefty

Methods

hfmap :: forall (f :: Type -> Type) (g :: Type -> Type). (f :-> g) -> EffUnion u ehs efs f :-> EffUnion u ehs efs g #

caseHF :: (u ehs f a -> r) -> (u efs Nop a -> r) -> EffUnion u ehs efs f a -> r Source #

type HasMembershipF u e efs = HasMembership u (LiftIns e) efs Source #

type ($) (f :: Type -> Type) a = f a infixr 3 Source #

Type-level infix applcation for functors.

type ($$) (h :: (Type -> Type) -> Type -> Type) f = h f infixr 4 Source #

Type-level infix applcation for higher-order functors.

type Elab e f = e f ~> f Source #

injectH :: (Freer c f, HFunctor (u ehs)) => u ehs (Eff u f ehs efs) ~> Eff u f ehs efs Source #

injectF :: Freer c f => u efs Nop ~> Eff u f ehs efs Source #

interpret :: forall e r ehs fr u c. (Freer c fr, Union u, HeadIns e) => (UnliftIfSingle e ~> Eff u fr ehs r) -> Eff u fr '[] (e ': r) ~> Eff u fr ehs r Source #

Using the provided interpretation function, interpret first-order effects.

interpretH :: forall eh ehs efs fr u c. (Freer c fr, Union u) => (eh (Eff u fr '[eh] efs) ~> Eff u fr ehs efs) -> Eff u fr '[eh] efs ~> Eff u fr ehs efs Source #

interpretK :: forall e rs r a ehs fr u c. (MonadFreer c fr, Union u, HeadIns e, c (Eff u fr ehs rs)) => (a -> Eff u fr ehs rs r) -> (forall x. (x -> Eff u fr ehs rs r) -> UnliftIfSingle e x -> Eff u fr ehs rs r) -> Eff u fr '[] (e ': rs) a -> Eff u fr ehs rs r Source #

Interpret the leading first-order effect class using delimited continuations.

interpretKH :: forall e r ehs efs a fr u c. (MonadFreer c fr, Union u, c (Eff u fr ehs efs)) => (a -> Eff u fr ehs efs r) -> (forall x. (x -> Eff u fr ehs efs r) -> e (Eff u fr '[e] efs) x -> Eff u fr ehs efs r) -> Eff u fr '[e] efs a -> Eff u fr ehs efs r Source #

interpretContT :: forall e rs r ehs fr u c. (MonadFreer c fr, Union u, HeadIns e, c (Eff u fr ehs rs)) => (UnliftIfSingle e ~> ContT r (Eff u fr ehs rs)) -> Eff u fr '[] (e ': rs) ~> ContT r (Eff u fr ehs rs) Source #

Interpret the leading first-order effect class using a continuation monad transformer.

interpretContTH :: forall e r ehs efs fr u c. (MonadFreer c fr, Union u, c (Eff u fr ehs efs)) => (e (Eff u fr '[e] efs) ~> ContT r (Eff u fr ehs efs)) -> Eff u fr '[e] efs ~> ContT r (Eff u fr ehs efs) Source #

interpretFin :: forall e r f fr u c. (Freer c fr, Union u, HeadIns e, c f) => (u r Nop ~> f) -> (UnliftIfSingle e ~> f) -> Eff u fr '[] (e ': r) ~> f Source #

Interpret the leading first-order effect class into the carrier f.

interpretFinH :: forall e f efs fr u c. (Freer c fr, Union u, c f) => (u efs Nop ~> f) -> (e (Eff u fr '[e] efs) ~> f) -> Eff u fr '[e] efs ~> f Source #

interpretT :: forall e r t ehs fr u c. (Freer c fr, Union u, MonadTrans t, HeadIns e, Monad (Eff u fr ehs r), c (t (Eff u fr ehs r))) => (UnliftIfSingle e ~> t (Eff u fr ehs r)) -> Eff u fr '[] (e ': r) ~> t (Eff u fr ehs r) Source #

Interpret the leading first-order effect class using a monad transformer.

interpretTH :: forall e t ehs efs fr u c. (Freer c fr, Union u, MonadTrans t, Monad (Eff u fr ehs efs), c (t (Eff u fr ehs efs))) => (e (Eff u fr '[e] efs) ~> t (Eff u fr ehs efs)) -> Eff u fr '[e] efs ~> t (Eff u fr ehs efs) Source #

interpretRec :: forall e rs ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), HeadIns e) => (UnliftIfSingle e ~> Eff u fr ehs rs) -> Eff u fr ehs (e ': rs) ~> Eff u fr ehs rs Source #

Using the provided interpretation function, interpret first-order effects. For actions (scopes) within higher-order effects that are currently unhandled, interpretation is applied recursively.

Note that if the interpretation function is stateful (i.e., not a monad morphism), the state is not maintained across the scopes.

interpretRecH :: forall e rs efs fr u c. (Freer c fr, Union u, HFunctor e, HFunctor (u rs), HFunctor (u (e ': rs))) => (e (Eff u fr rs efs) ~> Eff u fr rs efs) -> Eff u fr (e ': rs) efs ~> Eff u fr rs efs Source #

Using the provided interpretation function, interpret higher-order effects. For actions (scopes) within higher-order effects that are currently unhandled, interpretation is applied recursively.

Note that if the interpretation function is stateful (i.e., not a monad morphism), the state is not maintained across the scopes.

reinterpret :: forall e2 e1 r ehs fr u c. (Freer c fr, Union u, HeadIns e1, HFunctor (u '[])) => (UnliftIfSingle e1 ~> Eff u fr ehs (e2 ': r)) -> Eff u fr '[] (e1 ': r) ~> Eff u fr ehs (e2 ': r) Source #

reinterpretK :: forall e2 e1 rs r a ehs fr u c. (MonadFreer c fr, Union u, HeadIns e1, HFunctor (u '[]), c (Eff u fr ehs (e2 ': rs))) => (a -> Eff u fr ehs (e2 ': rs) r) -> (forall x. (x -> Eff u fr ehs (e2 ': rs) r) -> UnliftIfSingle e1 x -> Eff u fr ehs (e2 ': rs) r) -> Eff u fr '[] (e1 ': rs) a -> Eff u fr ehs (e2 ': rs) r Source #

reinterpretContT :: forall e2 e1 rs r ehs fr u c. (MonadFreer c fr, Union u, HeadIns e1, HFunctor (u '[]), c (Eff u fr ehs (e2 ': rs))) => (UnliftIfSingle e1 ~> ContT r (Eff u fr ehs (e2 ': rs))) -> Eff u fr '[] (e1 ': rs) ~> ContT r (Eff u fr ehs (e2 ': rs)) Source #

reinterpretT :: forall e2 e1 t r ehs fr u c. (Freer c fr, Union u, MonadTrans t, HeadIns e1, HFunctor (u '[]), Monad (Eff u fr ehs (e2 ': r)), c (t (Eff u fr ehs (e2 ': r)))) => (UnliftIfSingle e1 ~> t (Eff u fr ehs (e2 ': r))) -> Eff u fr '[] (e1 ': r) ~> t (Eff u fr ehs (e2 ': r)) Source #

reinterpretRec :: forall e2 e1 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), HeadIns e1) => (UnliftIfSingle e1 ~> Eff u fr ehs (e2 ': r)) -> Eff u fr ehs (e1 ': r) ~> Eff u fr ehs (e2 ': r) Source #

reinterpretRecH :: forall e2 e1 r efs fr u c. (Freer c fr, HFunctorUnion u, HFunctor e1, HFunctor e2, ForallHFunctor u r) => (e1 (Eff u fr (e2 ': r) efs) ~> Eff u fr (e2 ': r) efs) -> Eff u fr (e1 ': r) efs ~> Eff u fr (e2 ': r) efs Source #

interpose :: forall e efs fr u c. (Freer c fr, Union u, Member u e efs) => (e ~> Eff u fr '[] efs) -> Eff u fr '[] efs ~> Eff u fr '[] efs Source #

interposeK :: forall e efs r a fr u c. (MonadFreer c fr, Union u, Member u e efs, c (Eff u fr '[] efs)) => (a -> Eff u fr '[] efs r) -> (forall x. (x -> Eff u fr '[] efs r) -> e x -> Eff u fr '[] efs r) -> Eff u fr '[] efs a -> Eff u fr '[] efs r Source #

interposeContT :: forall e efs r fr u c. (MonadFreer c fr, Union u, Member u e efs, c (Eff u fr '[] efs)) => (e ~> ContT r (Eff u fr '[] efs)) -> Eff u fr '[] efs ~> ContT r (Eff u fr '[] efs) Source #

interposeFin :: forall e f efs fr u c. (Freer c fr, Union u, Member u e efs, c f) => (u efs Nop ~> f) -> (e ~> f) -> Eff u fr '[] efs ~> f Source #

interposeT :: forall e t efs fr u c. (Freer c fr, Union u, MonadTrans t, Member u e efs, Monad (Eff u fr '[] efs), c (t (Eff u fr '[] efs))) => (e ~> t (Eff u fr '[] efs)) -> Eff u fr '[] efs ~> t (Eff u fr '[] efs) Source #

interposeRec :: forall e ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs), Member u e efs) => (e ~> Eff u fr ehs efs) -> Eff u fr ehs efs ~> Eff u fr ehs efs Source #

interposeRecH :: forall e ehs efs fr u c. (Freer c fr, HFunctorUnion u, HFunctor e, ForallHFunctor u ehs, MemberH u e ehs) => (e (Eff u fr ehs efs) ~> Eff u fr ehs efs) -> Eff u fr ehs efs ~> Eff u fr ehs efs Source #

interpretAll :: forall g efs fr u c. (Freer c fr, Union u, c g) => (u efs Nop ~> g) -> Eff u fr '[] efs ~> g Source #

interpretAllE :: forall ehs' efs' efs fr u c. (Freer c fr, Union u) => (u efs Nop ~> Eff u fr ehs' efs') -> Eff u fr '[] efs ~> Eff u fr ehs' efs' Source #

interpretAllRecH :: forall ehs' ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u ehs (Eff u fr ehs' efs) ~> Eff u fr ehs' efs) -> Eff u fr ehs efs ~> Eff u fr ehs' efs Source #

interpretAllH :: forall ehs' ehs efs fr u c. (Freer c fr, Union u) => (u ehs (Eff u fr ehs efs) ~> Eff u fr ehs' efs) -> Eff u fr ehs efs ~> Eff u fr ehs' efs Source #

interpretAllRecFH :: forall g ehs efs fr u c. (Freer c fr, Union u, c g, HFunctor (u ehs)) => (u ehs g ~> g) -> (u efs Nop ~> g) -> Eff u fr ehs efs ~> g Source #

interpretAllFH :: forall g ehs efs fr u c. (Freer c fr, Union u, c g) => (u ehs (Eff u fr ehs efs) ~> g) -> (u efs Nop ~> g) -> Eff u fr ehs efs ~> g Source #

interpretAllRecFHE :: forall ehs' efs' ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u ehs (Eff u fr ehs' efs') ~> Eff u fr ehs' efs') -> (u efs Nop ~> Eff u fr ehs' efs') -> Eff u fr ehs efs ~> Eff u fr ehs' efs' Source #

interpretAllFHE :: forall ehs' efs' ehs efs fr u c. (Freer c fr, Union u) => (u ehs (Eff u fr ehs efs) ~> Eff u fr ehs' efs') -> (u efs Nop ~> Eff u fr ehs' efs') -> Eff u fr ehs efs ~> Eff u fr ehs' efs' Source #

interpretKAll :: forall r a efs fr u c. (MonadFreer c fr, Union u) => (a -> Eff u fr '[] efs r) -> (forall x. (x -> Eff u fr '[] efs r) -> u efs Nop x -> Eff u fr '[] efs r) -> Eff u fr '[] efs a -> Eff u fr '[] efs r Source #

interpretKAllRecH :: forall ehs' r a ehs efs fr u c. (MonadFreer c fr, Union u, HFunctor (u ehs), c (Eff u fr ehs' efs)) => (a -> Eff u fr ehs' efs r) -> (forall x. (x -> Eff u fr ehs' efs r) -> u ehs (ContT r (Eff u fr ehs' efs)) x -> Eff u fr ehs' efs r) -> Eff u fr ehs efs a -> Eff u fr ehs' efs r Source #

interpretKAllH :: forall ehs' r a ehs efs fr u c. (MonadFreer c fr, Union u, c (Eff u fr ehs' efs)) => (a -> Eff u fr ehs' efs r) -> (forall x. (x -> Eff u fr ehs' efs r) -> u ehs (Eff u fr ehs efs) x -> Eff u fr ehs' efs r) -> Eff u fr ehs efs a -> Eff u fr ehs' efs r Source #

interpretKAllRecFH :: forall g r a ehs efs fr u c. (MonadFreer c fr, Union u, HFunctor (u ehs)) => (a -> g r) -> (forall x. (x -> g r) -> u ehs (ContT r g) x -> g r) -> (forall x. (x -> g r) -> u efs Nop x -> g r) -> Eff u fr ehs efs a -> g r Source #

interpretKAllFH :: forall g r a ehs efs fr u c. (MonadFreer c fr, Union u) => (a -> g r) -> (forall x. (x -> g r) -> u ehs (Eff u fr ehs efs) x -> g r) -> (forall x. (x -> g r) -> u efs Nop x -> g r) -> Eff u fr ehs efs a -> g r Source #

interpretContTAll :: forall g r efs fr u c. (MonadFreer c fr, Union u) => (u efs Nop ~> ContT r g) -> Eff u fr '[] efs ~> ContT r g Source #

interpretContTAllRecH :: forall ehs' r ehs efs fr u c. (MonadFreer c fr, Union u, HFunctor (u ehs), c (Eff u fr ehs' efs)) => (u ehs (ContT r (Eff u fr ehs' efs)) ~> ContT r (Eff u fr ehs' efs)) -> Eff u fr ehs efs ~> ContT r (Eff u fr ehs' efs) Source #

interpretContTAllH :: forall ehs' r ehs efs fr u c. (MonadFreer c fr, Union u, c (Eff u fr ehs' efs)) => (u ehs (Eff u fr ehs efs) ~> ContT r (Eff u fr ehs' efs)) -> Eff u fr ehs efs ~> ContT r (Eff u fr ehs' efs) Source #

interpretContTAllRecFH :: forall g r ehs efs fr u c. (MonadFreer c fr, Union u, HFunctor (u ehs)) => (u ehs (ContT r g) ~> ContT r g) -> (u efs Nop ~> ContT r g) -> Eff u fr ehs efs ~> ContT r g Source #

interpretContTAllFH :: forall g r ehs efs fr u c. (MonadFreer c fr, Union u) => (u ehs (Eff u fr ehs efs) ~> ContT r g) -> (u efs Nop ~> ContT r g) -> Eff u fr ehs efs ~> ContT r g Source #

transCont :: Cont (m r) ~> ContT r m Source #

toInterpretKFromContT :: ((e ~> ContT r m) -> f ~> ContT r m') -> (a -> m' r) -> (forall x. (x -> m r) -> e x -> m r) -> f a -> m' r Source #

toInterpretKFromContT2 :: ((e1 ~> ContT r m) -> (e2 ~> ContT r m) -> f ~> ContT r m') -> (a -> m' r) -> (forall x. (x -> m r) -> e1 x -> m r) -> (forall x. (x -> m r) -> e2 x -> m r) -> f a -> m' r Source #

interpretTAll :: forall t g efs fr u c. (Freer c fr, Union u, c (t g)) => (u efs Nop ~> t g) -> Eff u fr '[] efs ~> t g Source #

interpretTAllRecH :: forall ehs' t ehs efs fr u c. (Freer c fr, Union u, MonadTrans t, HFunctor (u ehs), Monad (Eff u fr ehs' efs), c (t (Eff u fr ehs' efs))) => (u ehs (t (Eff u fr ehs' efs)) ~> t (Eff u fr ehs' efs)) -> Eff u fr ehs efs ~> t (Eff u fr ehs' efs) Source #

interpretTAllH :: forall ehs' t ehs efs fr u c. (Freer c fr, Union u, MonadTrans t, Monad (Eff u fr ehs' efs), c (t (Eff u fr ehs' efs))) => (u ehs (Eff u fr ehs efs) ~> t (Eff u fr ehs' efs)) -> Eff u fr ehs efs ~> t (Eff u fr ehs' efs) Source #

interpretAllRec :: forall efs' ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u efs Nop ~> Eff u fr ehs efs') -> Eff u fr ehs efs ~> Eff u fr ehs efs' Source #

transform :: forall e2 e1 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), HeadIns e1, HeadIns e2) => (UnliftIfSingle e1 ~> UnliftIfSingle e2) -> Eff u fr ehs (e1 ': r) ~> Eff u fr ehs (e2 ': r) Source #

transformH :: forall e2 e1 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e1 ': r))) => (e1 (Eff u fr (e2 ': r) efs) ~> e2 (Eff u fr (e2 ': r) efs)) -> Eff u fr (e1 ': r) efs ~> Eff u fr (e2 ': r) efs Source #

transformFH :: forall e2h e2f e1h e1f rh rf fr u c. (Freer c fr, Union u, HFunctor (u (e1h ': rh)), HeadIns e1f, HeadIns e2f) => (e1h (Eff u fr (e2h ': rh) (e2f ': rf)) ~> e2h (Eff u fr (e2h ': rh) (e2f ': rf))) -> (UnliftIfSingle e1f ~> UnliftIfSingle e2f) -> Eff u fr (e1h ': rh) (e1f ': rf) ~> Eff u fr (e2h ': rh) (e2f ': rf) Source #

translate :: forall e2 e1 es ehs fr u c. (Freer c fr, Union u, Member u e2 es, HFunctor (u ehs), HeadIns e1) => (UnliftIfSingle e1 ~> e2) -> Eff u fr ehs (e1 ': es) ~> Eff u fr ehs es Source #

translateH :: forall e2 e1 es efs fr u c. (Freer c fr, Union u, MemberH u e2 es, HFunctor (u (e1 ': es))) => (e1 (Eff u fr es efs) ~> e2 (Eff u fr es efs)) -> Eff u fr (e1 ': es) efs ~> Eff u fr es efs Source #

translateFH :: forall e2h e2f e1h e1f ehs efs fr u c. (Freer c fr, Union u, MemberH u e2h ehs, Member u e2f efs, HFunctor (u (e1h ': ehs)), HeadIns e1f) => (e1h (Eff u fr ehs efs) ~> e2h (Eff u fr ehs efs)) -> (UnliftIfSingle e1f ~> e2f) -> Eff u fr (e1h ': ehs) (e1f ': efs) ~> Eff u fr ehs efs Source #

rewrite :: forall e efs ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), Member u e efs) => (e ~> e) -> Eff u fr ehs efs ~> Eff u fr ehs efs Source #

rewriteH :: forall e efs ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), MemberH u e ehs) => (e (Eff u fr ehs efs) ~> e (Eff u fr ehs efs)) -> Eff u fr ehs efs ~> Eff u fr ehs efs Source #

rewriteFH :: forall eh ef efs ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), MemberH u eh ehs, Member u ef efs) => (eh (Eff u fr ehs efs) ~> eh (Eff u fr ehs efs)) -> (ef ~> ef) -> Eff u fr ehs efs ~> Eff u fr ehs efs Source #

transformAll :: forall efs' efs ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u efs Nop ~> u efs' Nop) -> Eff u fr ehs efs ~> Eff u fr ehs efs' Source #

transformAllH :: forall ehs' ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u ehs (Eff u fr ehs' efs) ~> u ehs' (Eff u fr ehs' efs)) -> Eff u fr ehs efs ~> Eff u fr ehs' efs Source #

transformAllFH :: forall ehs' efs' ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => (u ehs (Eff u fr ehs' efs') ~> u ehs' (Eff u fr ehs' efs')) -> (u efs Nop ~> u efs' Nop) -> Eff u fr ehs efs ~> Eff u fr ehs' efs' Source #

raiseN :: forall n ef' eh fr u c ef. (Weaken n ef ef', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh ef' Source #

raiseNH :: forall n eh' ef fr u c eh. (Weaken n eh eh', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh' ef Source #

raiseNUnderM :: forall n m ef' eh fr u c ef. (WeakenUnder n m ef ef', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh ef' Source #

raiseNUnderMH :: forall n m eh' ef fr u c eh. (WeakenUnder n m eh eh', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh' ef Source #

subsumeN :: forall n ef' eh fr u c ef. (Strengthen n u ef ef', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh ef' Source #

subsumeNH :: forall n eh' ef fr u c eh. (Strengthen n u eh eh', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh' ef Source #

subsumeNUnderM :: forall n m ef' eh fr u c ef. (StrengthenUnder n m u ef ef', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh ef' Source #

subsumeNUnderMH :: forall n m eh' ef fr u c eh. (StrengthenUnder n m u eh eh', Freer c fr, Union u, HFunctor (u eh)) => Eff u fr eh ef ~> Eff u fr eh' ef Source #

raise :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs r ~> Eff u fr ehs (e ': r) Source #

raise2 :: forall e2 e1 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs r ~> Eff u fr ehs (e2 ': (e1 ': r)) Source #

raise3 :: forall e3 e2 e1 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs r ~> Eff u fr ehs (e3 ': (e2 ': (e1 ': r))) Source #

raise4 :: forall e4 e3 e2 e1 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs r ~> Eff u fr ehs (e4 ': (e3 ': (e2 ': (e1 ': r)))) Source #

raiseH :: forall e r efs fr u c. (Freer c fr, Union u, HFunctor (u r)) => Eff u fr r efs ~> Eff u fr (e ': r) efs Source #

raise2H :: forall e2 e1 r efs fr u c. (Freer c fr, Union u, HFunctor (u r)) => Eff u fr r efs ~> Eff u fr (e2 ': (e1 ': r)) efs Source #

raise3H :: forall e3 e2 e1 r efs fr u c. (Freer c fr, Union u, HFunctor (u r)) => Eff u fr r efs ~> Eff u fr (e3 ': (e2 ': (e1 ': r))) efs Source #

raise4H :: forall e4 e3 e2 e1 r efs fr u c. (Freer c fr, Union u, HFunctor (u r)) => Eff u fr r efs ~> Eff u fr (e4 ': (e3 ': (e2 ': (e1 ': r)))) efs Source #

raiseUnder :: forall e1 e2 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e2 ': r) ~> Eff u fr ehs (e2 ': (e1 ': r)) Source #

raiseUnder2 :: forall e1 e2 e3 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e3 ': (e2 ': r)) ~> Eff u fr ehs (e3 ': (e2 ': (e1 ': r))) Source #

raiseUnder3 :: forall e1 e2 e3 e4 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e4 ': (e3 ': (e2 ': r))) ~> Eff u fr ehs (e4 ': (e3 ': (e2 ': (e1 ': r)))) Source #

raise2Under2 :: forall e1 e2 e3 e4 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e4 ': (e3 ': r)) ~> Eff u fr ehs (e4 ': (e3 ': (e2 ': (e1 ': r)))) Source #

raise2Under :: forall e1 e2 e3 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e3 ': r) ~> Eff u fr ehs (e3 ': (e2 ': (e1 ': r))) Source #

raise3Under :: forall e1 e2 e3 e4 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e4 ': r) ~> Eff u fr ehs (e4 ': (e3 ': (e2 ': (e1 ': r)))) Source #

raiseUnderH :: forall e1 e2 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e2 ': r))) => Eff u fr (e2 ': r) efs ~> Eff u fr (e2 ': (e1 ': r)) efs Source #

raiseUnder2H :: forall e1 e2 e3 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e3 ': (e2 ': r)))) => Eff u fr (e3 ': (e2 ': r)) efs ~> Eff u fr (e3 ': (e2 ': (e1 ': r))) efs Source #

raiseUnder3H :: forall e1 e2 e3 e4 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e4 ': (e3 ': (e2 ': r))))) => Eff u fr (e4 ': (e3 ': (e2 ': r))) efs ~> Eff u fr (e4 ': (e3 ': (e2 ': (e1 ': r)))) efs Source #

raise2Under2H :: forall e1 e2 e3 e4 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e4 ': (e3 ': r)))) => Eff u fr (e4 ': (e3 ': r)) efs ~> Eff u fr (e4 ': (e3 ': (e2 ': (e1 ': r)))) efs Source #

raise2UnderH :: forall e1 e2 e3 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e3 ': r))) => Eff u fr (e3 ': r) efs ~> Eff u fr (e3 ': (e2 ': (e1 ': r))) efs Source #

raise3UnderH :: forall e1 e2 e3 e4 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e4 ': r))) => Eff u fr (e4 ': r) efs ~> Eff u fr (e4 ': (e3 ': (e2 ': (e1 ': r)))) efs Source #

raiseAll :: forall ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs '[] ~> Eff u fr ehs efs Source #

raiseAllH :: forall ehs efs fr u c. (Freer c fr, Union u) => Eff u fr '[] efs ~> Eff u fr ehs efs Source #

flipEff :: forall e1 e2 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e1 ': (e2 ': r)) ~> Eff u fr ehs (e2 ': (e1 ': r)) Source #

flipEff3 :: forall e1 e2 e3 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e1 ': (e2 ': (e3 ': r))) ~> Eff u fr ehs (e3 ': (e2 ': (e1 ': r))) Source #

flipEffUnder :: forall e1 e2 e3 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e3 ': (e1 ': (e2 ': r))) ~> Eff u fr ehs (e3 ': (e2 ': (e1 ': r))) Source #

flipEffH :: forall e1 e2 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e1 ': (e2 ': r)))) => Eff u fr (e1 ': (e2 ': r)) efs ~> Eff u fr (e2 ': (e1 ': r)) efs Source #

flipEff3H :: forall e1 e2 e3 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e1 ': (e2 ': (e3 ': r))))) => Eff u fr (e1 ': (e2 ': (e3 ': r))) efs ~> Eff u fr (e3 ': (e2 ': (e1 ': r))) efs Source #

flipEffUnderH :: forall e1 e2 e3 r efs fr u c. (Freer c fr, Union u, HFunctor (u (e3 ': (e1 ': (e2 ': r))))) => Eff u fr (e3 ': (e1 ': (e2 ': r))) efs ~> Eff u fr (e3 ': (e2 ': (e1 ': r))) efs Source #

subsume :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), HasMembershipRec u e r) => Eff u fr ehs (e ': r) ~> Eff u fr ehs r Source #

subsumeH :: forall e r efs fr u c. (Freer c fr, Union u, HFunctor (u (e ': r)), HasMembershipRec u e r) => Eff u fr (e ': r) efs ~> Eff u fr r efs Source #

copyEff :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), Applicative (Eff u fr ehs (e ': r)), HeadIns e, HasMembershipRec u e r) => Eff u fr ehs (e ': r) ~> Eff u fr ehs (e ': r) Source #

copyEffH :: forall e r ef fr u c. (Freer c fr, Union u, HFunctorUnion u, HFunctor e, ForallHFunctor u r, Applicative (Eff u fr (e ': r) ef), HasMembershipRec u e r) => Eff u fr (e ': r) ef ~> Eff u fr (e ': r) ef Source #

dupEff :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), Applicative (Eff u fr ehs (e ': (e ': r))), HeadIns e) => Eff u fr ehs (e ': r) ~> Eff u fr ehs (e ': (e ': r)) Source #

dupEffH :: forall e r ef fr u c. (Freer c fr, Union u, Applicative (Eff u fr (e ': (e ': r)) ef), HFunctorUnion u, HFunctor e, ForallHFunctor u r) => Eff u fr (e ': r) ef ~> Eff u fr (e ': (e ': r)) ef Source #

bundle :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e ': r) ~> Eff u fr ehs (u '[e] ': r) Source #

unbundle :: forall e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (u '[e] ': r) ~> Eff u fr ehs (e ': r) Source #

pushBundle :: forall e r1 r2 ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (u r1 ': (e ': r2)) ~> Eff u fr ehs (u (e ': r1) ': r2) Source #

popBundle :: forall e r1 r2 ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (u (e ': r1) ': r2) ~> Eff u fr ehs (u r1 ': (e ': r2)) Source #

enqueSum :: forall e1 e2 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (e1 ': (e2 ': r)) ~> Eff u fr ehs ((e1 :+: e2) ': r) Source #

dequeSum :: forall e1 e2 r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs ((e1 :+: e2) ': r) ~> Eff u fr ehs (e1 ': (e2 ': r)) Source #

liftInsEff :: forall e eh ef fr u c. (Freer c fr, Union u, HFunctor (u eh), HFunctor e) => Eff u fr eh (e ': ef) ~> Eff u fr (e ': eh) ef Source #

splitEff :: forall fr' e r ehs fr u c. (Freer c fr', Freer c fr, Union u, HeadIns e) => Eff u fr '[] (e ': r) ~> fr' (UnliftIfSingle e + Eff u fr ehs r) Source #

mergeEff :: forall fr' e r ehs fr u c. (Freer c fr', Freer c fr, Union u, HeadIns e, c (Eff u fr ehs (e ': r)), HFunctor (u ehs)) => fr' (UnliftIfSingle e + Eff u fr ehs r) ~> Eff u fr ehs (e ': r) Source #

mergeEffH :: forall fr' e r efs fr u c. (Freer c fr', Freer c fr, Union u, c (Eff u fr (e ': r) efs), HFunctor (u r), HFunctor e) => Hefty fr' (e :+: LiftIns (Eff u fr r efs)) ~> Eff u fr (e ': r) efs Source #

send0 :: (Freer c fr, Union u, HeadIns e) => UnliftIfSingle e ~> Eff u fr eh (e ': r) Source #

send1 :: (Freer c fr, Union u, HeadIns e1) => UnliftIfSingle e1 ~> Eff u fr eh (e2 ': (e1 ': r)) Source #

send0H :: (Freer c fr, Union u) => e (Eff u fr (e ': r) ef) ~> Eff u fr (e ': r) ef Source #

send1H :: (Freer c fr, Union u) => e1 (Eff u fr (e2 ': (e1 ': r)) ef) ~> Eff u fr (e2 ': (e1 ': r)) ef Source #

liftEff :: (Freer c fr, Union u) => u ef Nop ~> Eff u fr eh ef Source #

liftEffH :: (Freer c fr, Union u) => u eh (Eff u fr eh ef) ~> Eff u fr eh ef Source #

runEff :: forall f fr u c. (Freer c fr, Union u, c f) => Eff u fr '[] '[LiftIns f] ~> f Source #

runPure :: forall a fr u c. (Freer c fr, Union u, c Identity) => Eff u fr '[] '[] a -> a Source #

tagEff :: forall tag e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (LiftIns e ': r) ~> Eff u fr ehs (LiftIns (e # tag) ': r) Source #

tagEffH :: forall tag e r efs fr u c. (Freer c fr, Union u, HFunctor (u (e ': r))) => Eff u fr (e ': r) efs ~> Eff u fr ((e ## tag) ': r) efs Source #

untagEff :: forall tag e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (LiftIns (e # tag) ': r) ~> Eff u fr ehs (LiftIns e ': r) Source #

untagEffH :: forall tag e r efs fr u c. (Freer c fr, Union u, HFunctor (u ((e ## tag) ': r))) => Eff u fr ((e ## tag) ': r) efs ~> Eff u fr (e ': r) efs Source #

unkeyEff :: forall key e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs (LiftIns (key #> e) ': r) ~> Eff u fr ehs (LiftIns e ': r) Source #

unkeyEffH :: forall key e r efs fr u c. (Freer c fr, Union u, HFunctor (u ((key ##> e) ': r))) => Eff u fr ((key ##> e) ': r) efs ~> Eff u fr (e ': r) efs Source #

keySubsume :: forall key e r ehs fr u c. (Freer c fr, Union u, HFunctor (u ehs), MemberBy u key e r) => Eff u fr ehs (LiftIns e ': r) ~> Eff u fr ehs r Source #

keySubsumeH :: forall key e r efs fr u c. (Freer c fr, HFunctorUnion u, HFunctor e, ForallHFunctor u r, MemberHBy u key e r) => Eff u fr (e ': r) efs ~> Eff u fr r efs Source #

end :: Union u => u '[] f a -> x Source #