Copyright | (c) 2023-2024 Yamada Ryo |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
Control.Effect.Hefty
Description
A Hefty carrier that can be used as a handler for effect systems based
on data-effects
.
Synopsis
- type Eff u fr ehs efs = Hefty fr (EffUnion u ehs efs)
- type Effectful u fr eh ef = Eff u fr (UH u eh) (U u ef)
- newtype EffUnion (u :: [SigClass] -> SigClass) ehs efs f a = EffUnion {
- unEffUnion :: (u ehs f + u efs Nop) a
- caseHF :: (u ehs f a -> r) -> (u efs Nop a -> r) -> EffUnion u ehs efs f a -> r
- type HasMembershipF u e efs = HasMembership u (LiftIns e) efs
- type ($) (f :: Type -> Type) a = f a
- type ($$) (h :: (Type -> Type) -> Type -> Type) f = h f
- type Elab e f = e f ~> f
- injectH :: (Freer c f, HFunctor (u ehs)) => u ehs (Eff u f ehs efs) ~> Eff u f ehs efs
- injectF :: Freer c f => u efs Nop ~> Eff u f ehs efs
- 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
- 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
- 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
- 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
- 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)
- 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)
- 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
- 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
- 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)
- 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)
- 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
- 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
- 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)
- 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
- 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))
- 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))
- 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)
- 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
- 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
- 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
- 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)
- 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
- 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)
- 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
- 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
- interpretAll :: forall g efs fr u c. (Freer c fr, Union u, c g) => (u efs Nop ~> g) -> Eff u fr '[] efs ~> g
- 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'
- 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
- 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
- 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
- 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
- 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'
- 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'
- 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
- 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
- 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
- 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
- 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
- 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
- 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)
- 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)
- 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
- 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
- transCont :: Cont (m r) ~> ContT r m
- detransContT :: ContT r m ~> Cont (m r)
- 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
- 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
- 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
- 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)
- 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)
- 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'
- 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)
- 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
- 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)
- 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
- 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
- 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
- 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
- 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
- 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
- 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'
- 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
- 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'
- 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'
- 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
- 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'
- 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
- 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'
- 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
- 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'
- 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
- 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)
- 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))
- 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)))
- 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))))
- 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
- 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
- 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
- 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
- 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))
- 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)))
- 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))))
- 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))))
- 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)))
- 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))))
- 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
- 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
- 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
- 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
- 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
- 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
- raiseAll :: forall ehs efs fr u c. (Freer c fr, Union u, HFunctor (u ehs)) => Eff u fr ehs '[] ~> Eff u fr ehs efs
- raiseAllH :: forall ehs efs fr u c. (Freer c fr, Union u) => Eff u fr '[] efs ~> Eff u fr ehs efs
- 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))
- 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)))
- 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)))
- 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
- 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
- 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
- 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
- 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
- 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)
- 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
- 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))
- 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
- 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)
- 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)
- 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)
- 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))
- 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)
- 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))
- 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
- 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)
- 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)
- 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
- send0 :: (Freer c fr, Union u, HeadIns e) => UnliftIfSingle e ~> Eff u fr eh (e ': r)
- send1 :: (Freer c fr, Union u, HeadIns e1) => UnliftIfSingle e1 ~> Eff u fr eh (e2 ': (e1 ': r))
- send0H :: (Freer c fr, Union u) => e (Eff u fr (e ': r) ef) ~> Eff u fr (e ': r) ef
- send1H :: (Freer c fr, Union u) => e1 (Eff u fr (e2 ': (e1 ': r)) ef) ~> Eff u fr (e2 ': (e1 ': r)) ef
- liftEff :: (Freer c fr, Union u) => u ef Nop ~> Eff u fr eh ef
- liftEffH :: (Freer c fr, Union u) => u eh (Eff u fr eh ef) ~> Eff u fr eh ef
- runEff :: forall f fr u c. (Freer c fr, Union u, c f) => Eff u fr '[] '[LiftIns f] ~> f
- runPure :: forall a fr u c. (Freer c fr, Union u, c Identity) => Eff u fr '[] '[] a -> a
- 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)
- 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
- 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)
- 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
- 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)
- 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
- 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
- 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
- end :: Union u => u '[] f a -> x
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
(MemberRec u (key ##> e) ehs, (key ##> e) ~ FromJust (Lookup key ehs)) => InjectSigBy (key :: k) e (EffUnion u ehs efs) Source # | |
Defined in Control.Effect.Hefty | |
(MemberRec u (LiftIns (key #> e)) efs, LiftIns (key #> e) ~ FromJust (Lookup key efs)) => InjectInsBy (key :: k) e (EffUnion u ehs efs f) Source # | |
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 # | |
MemberRec u (LiftIns e) efs => InjectIns e (EffUnion u ehs efs f) Source # | |
HFunctor (u ehs) => HFunctor (EffUnion u ehs efs) Source # | |
type HasMembershipF u e efs = HasMembership u (LiftIns e) efs Source #
type ($$) (h :: (Type -> Type) -> Type -> Type) f = h f infixr 4 Source #
Type-level infix applcation for higher-order functors.
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 #
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 #
send1 :: (Freer c fr, Union u, HeadIns e1) => UnliftIfSingle e1 ~> Eff u fr eh (e2 ': (e1 ': r)) Source #
send1H :: (Freer c fr, Union u) => e1 (Eff u fr (e2 ': (e1 ': r)) ef) ~> Eff u fr (e2 ': (e1 ': r)) ef 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 #