Copyright | (c) 2024-2025 Sayo contributors |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Safe Haskell | None |
Language | GHC2021 |
Data.Effect.OpenUnion
Description
Synopsis
- data Union (es :: [Effect]) (f :: Type -> Type) a where
- hfmapUnion :: forall f g (es :: [Effect]) a. (forall x. f x -> g x) -> Union es f a -> Union es g a
- class FOEs (es :: [Effect])
- class PolyHFunctors (es :: [Effect])
- coerceFOEs :: forall (es :: [Effect]) (f :: Type -> Type) a (g :: Type -> Type). FOEs es => Union es f a -> Union es g a
- newtype Membership (e :: Effect) (es :: [Effect]) = UnsafeMembership {
- unMembership :: Int
- pattern Here :: forall e (es :: [Effect]). Membership e (e ': es)
- pattern There :: Membership e es -> Membership e (e ': es)
- (!:>) :: forall (e :: Effect) (e' :: Effect) (es :: [Effect]) r. ((e :~: e') -> r) -> (Membership e es -> r) -> Membership e (e' ': es) -> r
- weakenFor :: forall (e :: Effect) (es :: [Effect]) (e' :: Effect). Membership e es -> Membership e (e' ': es)
- mapUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. (forall (e :: Effect). Membership e es -> Membership e es') -> Union es f a -> Union es' f a
- membershipAt :: forall (i :: Nat) (es :: [Effect]). KnownNat i => Membership (At i es) es
- compareMembership :: forall (e :: Effect) (es :: [Effect]) (e' :: Effect). Membership e es -> Membership e' es -> Maybe (e :~: e')
- type family At (i :: Natural) (es :: [k]) :: k where ...
- intVal :: forall (n :: Nat). KnownNat n => Int
- data LabelResolver
- data KeyResolver
- data IdentityResolver
- data KeyDiscriminator (key :: k)
- data NoKeyDiscriminator
- data IdentityDiscriminator (e :: Effect)
- type family Discriminator resolver (e :: Effect)
- type family KeyOf (e :: (Type -> Type) -> Type -> Type) where ...
- type family ResolverName resolver :: Symbol
- type (:>) (e :: Effect) (es :: [Effect]) = MemberBy LabelResolver (Discriminator LabelResolver e) e es
- type Has (key :: k) (e :: Effect) (es :: [Effect]) = MemberBy KeyResolver (KeyDiscriminator key) (e # key) es
- type In (e :: Effect) (es :: [Effect]) = MemberBy IdentityResolver (IdentityDiscriminator e) e es
- type KnownIndex (i :: Nat) (es :: [Effect]) = (KnownNat i, KnownOrder (At i es))
- type FindByLabel label (e :: Effect) (es :: [Effect]) = MemberBy LabelResolver label e es
- type MemberBy resolver dscr (e :: Effect) (es :: [Effect]) = (FindBy resolver dscr (Discriminator resolver (HeadOf es)) e es, ErrorIfNotFound resolver dscr (Discriminator resolver (HeadOf es)) e es es, KnownOrder e)
- class (dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf r)) => FindBy resolver dscr dscr' (e :: Effect) (r :: [Effect]) | resolver dscr dscr' r -> e where
- findBy :: Membership e r
- membership :: forall resolver dscr (e :: Effect) (es :: [Effect]). FindBy resolver dscr (Discriminator resolver (HeadOf es)) e es => Membership e es
- labelMembership :: forall (e :: Effect) (es :: [Effect]). FindBy LabelResolver (LabelOf e) (LabelOf (HeadOf es)) e es => Membership e es
- keyMembership :: forall {k} (key :: k) (e :: Effect) (es :: [(Type -> Type) -> Type -> Type]). FindBy KeyResolver (KeyDiscriminator key) (KeyOf (HeadOf es)) (e # key) es => Membership (e # key) es
- identityMembership :: forall (e :: Effect) (es :: [Effect]). FindBy IdentityResolver (IdentityDiscriminator e) (IdentityDiscriminator (HeadOf es)) e es => Membership e es
- class (dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf r)) => ErrorIfNotFound resolver dscr dscr' (e :: Effect) (r :: [Effect]) (w :: [Effect])
- type family HeadOf (es :: [k]) :: k where ...
- type KnownOrder (e :: Effect) = Elem e (OrderOf e)
- class order ~ OrderOf e => Elem (e :: Effect) (order :: EffectOrder) where
- inject :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> e f a -> Union es f a
- project :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> Union es f a -> Maybe (e f a)
- (!:) :: forall (f :: Type -> Type) a r (es :: [Effect]). (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r
- extract :: forall (f :: Type -> Type) a. Union '[e] f a -> e f a
- decomp :: forall e (es :: [Effect]) (f :: Type -> Type) a. (KnownOrder e, HFunctor e) => Union (e ': es) f a -> Either (e f a) (Union es f a)
- projectAnyOrder :: forall e (es :: [Effect]) (f :: Type -> Type) a. HFunctor e => Membership e es -> Union es f a -> Maybe (e f a)
- caseAnyOrder :: forall e (f :: Type -> Type) a r (es :: [Effect]). HFunctor e => (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r
- extractAnyOrder :: forall e (es :: [Effect]) (f :: Type -> Type) a. HFunctor e => Union es f a -> e f a
- hfmapDynUnsafeCoerce :: HFunctor e' => EffectOrder -> (forall x. f x -> g x) -> e f a -> e' g a
- nil :: forall (f :: Type -> Type) a r. Union ('[] :: [Effect]) f a -> r
- nilMembership :: forall (e :: Effect) r. Membership e ('[] :: [Effect]) -> r
- weakensFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect). Suffix es es' => Membership e es -> Membership e es'
- class Suffix (es :: [Effect]) (es' :: [Effect]) where
- class SuffixUnder (es :: [Effect]) (es' :: [Effect]) where
- prefixLenUnder :: Int
- offset :: Int
- weakensUnderFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect). SuffixUnder es es' => Membership e es -> Membership e es'
- type family RemoveHOEs (es :: [Effect]) :: [Effect] where ...
- type WeakenHOEs (es :: [Effect]) = (WeakenHOEs_ es 0 (OrderOf (HeadOf es)), FOEs (RemoveHOEs es))
- class orderOfHead ~ OrderOf (HeadOf es) => WeakenHOEs_ (es :: [Effect]) (countF :: Natural) (orderOfHead :: EffectOrder) where
- foldHoeIndexShifter :: (Int -> Int) -> Int -> Int
- type family RemoveExps (es :: [Effect]) :: [Effect] where ...
- type WeakenExps (es :: [Effect]) = (WeakenExps_ es 0 (FormOf (HeadOf es)), PolyHFunctors (RemoveExps es))
- class formOfHead ~ FormOf (HeadOf es) => WeakenExps_ (es :: [Effect]) (countP :: Natural) (formOfHead :: EffectForm) where
- foldExpIndexShifter :: (Int -> Int) -> Int -> Int
- weaken :: forall (es :: [Effect]) (f :: Type -> Type) a (e :: Effect). Union es f a -> Union (e ': es) f a
- weakens :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. Suffix es es' => Union es f a -> Union es' f a
- weakensUnder :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. SuffixUnder es es' => Union es f a -> Union es' f a
- weakenHOEsFor :: forall (es :: [Effect]) (e :: Effect). WeakenHOEs es => Membership e (RemoveHOEs es) -> Membership e es
- weakenHOEs :: forall (es :: [Effect]) (f :: Type -> Type) a. WeakenHOEs es => Union (RemoveHOEs es) f a -> Union es f a
- weakenExpsFor :: forall (es :: [Effect]) (e :: Effect). WeakenExps es => Membership e (RemoveExps es) -> Membership e es
- weakenExps :: forall (es :: [Effect]) (f :: Type -> Type) a. WeakenExps es => Union (RemoveExps es) f a -> Union es f a
- class KnownLength (xs :: [k]) where
- reifyLength :: Int
- type family (es :: [Effect]) ++ (es' :: [Effect]) :: [Effect] where ...
- (!++) :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a r. KnownLength es => (Union es f a -> r) -> (Union es' f a -> r) -> Union (es ++ es') f a -> r
- bundleUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength es => Union (es ++ es') f a -> Union (Union es ': es') f a
- unbundleUnion :: forall (es :: [Effect]) (es' :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. KnownLength es => Union (Union es ': es') f a -> Union (es ++ es') f a
- splitUnion :: forall (es :: [Effect]) (es' :: [Effect]) (es'' :: [Effect]) (f :: Type -> Type) a. KnownLength es => (forall (e :: Effect). Membership e es -> Membership e es'') -> (forall (e :: Effect). Membership e es' -> Membership e es'') -> Union (es ++ es') f a -> Union es'' f a
- mergeUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength es => Either (Union es f a) (Union es' f a) -> Union (es ++ es') f a
- splitUnion1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength fs => (forall (e :: Effect). Membership e (Each fs x) -> Membership e es') -> (forall (e :: Effect). Membership e es -> Membership e es') -> Union (Each fs x ++ es) f a -> Union es' f a
- mergeUnion1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (f :: Type -> Type) a. KnownLength fs => Either (Union (Each fs x) f a) (Union es f a) -> Union (Each fs x ++ es) f a
- splitFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect) r. KnownLength es => (Membership e es -> r) -> (Membership e es' -> r) -> Membership e (es ++ es') -> r
- splitFor1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (e :: Effect) r. KnownLength fs => (Membership e (Each fs x) -> r) -> (Membership e es -> r) -> Membership e (Each fs x ++ es) -> r
- suffixFor :: forall (es' :: [Effect]) (es :: [Effect]) (e :: Effect). Membership e es -> Membership e (es ++ es')
- prefixFor :: forall (es' :: [Effect]) (es :: [Effect]) (e :: Effect). KnownLength es' => Membership e es -> Membership e (es' ++ es)
- type family Each (fs :: [k -> Effect]) (x :: k) :: [Effect] where ...
- prefixFor1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (e :: Effect). KnownLength fs => Membership e es -> Membership e (Each fs x ++ es)
- data Ordership (o :: EffectOrder) (e :: Effect) (f :: Type -> Type) (g :: Type -> Type) where
- UnsafeFirst :: forall (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). Ordership 'FirstOrder e f g
- UnsafeHigher :: forall (g :: Type -> Type) (f :: Type -> Type) (e :: Effect). (forall x. g x -> f x) -> Ordership 'HigherOrder e f g
- union :: forall (es :: [Effect]) (f :: Type -> Type) a r. (forall (e :: Effect) (o :: EffectOrder) (g :: Type -> Type). Membership e es -> Ordership o e f g -> e g a -> r) -> Union es f a -> r
- mkUnion :: forall e (es :: [Effect]) (o :: EffectOrder) (f :: Type -> Type) (g :: Type -> Type) a. Membership e es -> Ordership o e f g -> e g a -> Union es f a
- firstOrdership :: forall (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). FirstOrder e => Ordership 'FirstOrder e f g
- higherOrdership :: forall (e :: Effect) g f. OrderOf e ~ 'HigherOrder => (forall x. g x -> f x) -> Ordership 'HigherOrder e f g
- shrinkOrdership :: forall (o :: EffectOrder) (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). Ordership o e f g -> Ordership (OrderOf e) e f g
- continuationOfInterpretation :: forall (e :: Effect) f g. Ordership 'HigherOrder e f g -> forall x. g x -> f x
Documentation
hfmapUnion :: forall f g (es :: [Effect]) a. (forall x. f x -> g x) -> Union es f a -> Union es g a Source #
class FOEs (es :: [Effect]) Source #
The list es
consists only of first-order effects.
Instances
FOEs ('[] :: [Effect]) Source # | |
Defined in Data.Effect.OpenUnion | |
(FirstOrder e, FOEs es) => FOEs (e ': es) Source # | |
Defined in Data.Effect.OpenUnion |
class PolyHFunctors (es :: [Effect]) Source #
The list es
consists only of polynomial effects.
Instances
PolyHFunctors ('[] :: [Effect]) Source # | |
Defined in Data.Effect.OpenUnion | |
(PolyHFunctor e, PolyHFunctors es) => PolyHFunctors (e ': es) Source # | |
Defined in Data.Effect.OpenUnion |
coerceFOEs :: forall (es :: [Effect]) (f :: Type -> Type) a (g :: Type -> Type). FOEs es => Union es f a -> Union es g a Source #
newtype Membership (e :: Effect) (es :: [Effect]) Source #
Constructors
UnsafeMembership | |
Fields
|
Instances
Show (Membership e es) Source # | |
Defined in Data.Effect.OpenUnion Methods showsPrec :: Int -> Membership e es -> ShowS # show :: Membership e es -> String # showList :: [Membership e es] -> ShowS # | |
Eq (Membership e es) Source # | |
Defined in Data.Effect.OpenUnion Methods (==) :: Membership e es -> Membership e es -> Bool # (/=) :: Membership e es -> Membership e es -> Bool # |
pattern Here :: forall e (es :: [Effect]). Membership e (e ': es) Source #
pattern There :: Membership e es -> Membership e (e ': es) Source #
(!:>) :: forall (e :: Effect) (e' :: Effect) (es :: [Effect]) r. ((e :~: e') -> r) -> (Membership e es -> r) -> Membership e (e' ': es) -> r infixr 5 Source #
weakenFor :: forall (e :: Effect) (es :: [Effect]) (e' :: Effect). Membership e es -> Membership e (e' ': es) Source #
mapUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. (forall (e :: Effect). Membership e es -> Membership e es') -> Union es f a -> Union es' f a Source #
membershipAt :: forall (i :: Nat) (es :: [Effect]). KnownNat i => Membership (At i es) es Source #
compareMembership :: forall (e :: Effect) (es :: [Effect]) (e' :: Effect). Membership e es -> Membership e' es -> Maybe (e :~: e') Source #
data LabelResolver Source #
Instances
type ResolverName LabelResolver Source # | |
Defined in Data.Effect.OpenUnion | |
type Discriminator LabelResolver e Source # | |
Defined in Data.Effect.OpenUnion |
data KeyResolver Source #
Instances
type ResolverName KeyResolver Source # | |
Defined in Data.Effect.OpenUnion | |
type Discriminator KeyResolver e Source # | |
Defined in Data.Effect.OpenUnion |
data IdentityResolver Source #
Instances
type ResolverName IdentityResolver Source # | |
Defined in Data.Effect.OpenUnion | |
type Discriminator IdentityResolver e Source # | |
Defined in Data.Effect.OpenUnion |
data KeyDiscriminator (key :: k) Source #
data NoKeyDiscriminator Source #
data IdentityDiscriminator (e :: Effect) Source #
type family Discriminator resolver (e :: Effect) Source #
Instances
type Discriminator IdentityResolver e Source # | |
Defined in Data.Effect.OpenUnion | |
type Discriminator KeyResolver e Source # | |
Defined in Data.Effect.OpenUnion | |
type Discriminator LabelResolver e Source # | |
Defined in Data.Effect.OpenUnion |
type family KeyOf (e :: (Type -> Type) -> Type -> Type) where ... Source #
Equations
KeyOf (e # key) = KeyDiscriminator key | |
KeyOf e = NoKeyDiscriminator |
type family ResolverName resolver :: Symbol Source #
Instances
type ResolverName IdentityResolver Source # | |
Defined in Data.Effect.OpenUnion | |
type ResolverName KeyResolver Source # | |
Defined in Data.Effect.OpenUnion | |
type ResolverName LabelResolver Source # | |
Defined in Data.Effect.OpenUnion |
type (:>) (e :: Effect) (es :: [Effect]) = MemberBy LabelResolver (Discriminator LabelResolver e) e es infix 4 Source #
type Has (key :: k) (e :: Effect) (es :: [Effect]) = MemberBy KeyResolver (KeyDiscriminator key) (e # key) es Source #
type In (e :: Effect) (es :: [Effect]) = MemberBy IdentityResolver (IdentityDiscriminator e) e es infix 4 Source #
type KnownIndex (i :: Nat) (es :: [Effect]) = (KnownNat i, KnownOrder (At i es)) Source #
type FindByLabel label (e :: Effect) (es :: [Effect]) = MemberBy LabelResolver label e es Source #
type MemberBy resolver dscr (e :: Effect) (es :: [Effect]) = (FindBy resolver dscr (Discriminator resolver (HeadOf es)) e es, ErrorIfNotFound resolver dscr (Discriminator resolver (HeadOf es)) e es es, KnownOrder e) Source #
class (dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf r)) => FindBy resolver dscr dscr' (e :: Effect) (r :: [Effect]) | resolver dscr dscr' r -> e where Source #
Methods
findBy :: Membership e r Source #
Instances
(dscr ~ Discriminator resolver e, dscr ~ Discriminator resolver e', e ~ e') => FindBy resolver dscr dscr e (e' ': r) Source # | |
Defined in Data.Effect.OpenUnion Methods findBy :: Membership e (e' ': r) Source # | |
(dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver e', FindBy resolver dscr (Discriminator resolver (HeadOf r)) e r) => FindBy resolver dscr dscr' e (e' ': r) Source # | |
Defined in Data.Effect.OpenUnion Methods findBy :: Membership e (e' ': r) Source # |
membership :: forall resolver dscr (e :: Effect) (es :: [Effect]). FindBy resolver dscr (Discriminator resolver (HeadOf es)) e es => Membership e es Source #
labelMembership :: forall (e :: Effect) (es :: [Effect]). FindBy LabelResolver (LabelOf e) (LabelOf (HeadOf es)) e es => Membership e es Source #
keyMembership :: forall {k} (key :: k) (e :: Effect) (es :: [(Type -> Type) -> Type -> Type]). FindBy KeyResolver (KeyDiscriminator key) (KeyOf (HeadOf es)) (e # key) es => Membership (e # key) es Source #
identityMembership :: forall (e :: Effect) (es :: [Effect]). FindBy IdentityResolver (IdentityDiscriminator e) (IdentityDiscriminator (HeadOf es)) e es => Membership e es Source #
class (dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf r)) => ErrorIfNotFound resolver dscr dscr' (e :: Effect) (r :: [Effect]) (w :: [Effect]) Source #
Instances
(dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf r)) => ErrorIfNotFound resolver dscr dscr' e r w Source # | |
Defined in Data.Effect.OpenUnion | |
(TypeError ((((('Text "The effect \8216" ':<>: 'ShowType e) ':<>: 'Text "\8217 does not exist within the effect list") ':$$: (('Text " \8216" ':<>: 'ShowType w) ':<>: 'Text "\8217")) ':$$: ('Text "Resolver: " ':<>: 'Text (ResolverName resolver))) ':$$: ('Text "Discriminator: " ':<>: 'ShowType dscr)) :: Constraint, dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver (HeadOf ('[] :: [Effect]))) => ErrorIfNotFound resolver dscr dscr' e ('[] :: [Effect]) w Source # | |
Defined in Data.Effect.OpenUnion | |
(dscr ~ Discriminator resolver e, dscr ~ Discriminator resolver e', e ~ e') => ErrorIfNotFound resolver dscr dscr e (e' ': r) w Source # | |
Defined in Data.Effect.OpenUnion | |
(dscr ~ Discriminator resolver e, dscr' ~ Discriminator resolver e', ErrorIfNotFound resolver dscr (Discriminator resolver (HeadOf r)) e r w) => ErrorIfNotFound resolver dscr dscr' e (e' ': r) w Source # | |
Defined in Data.Effect.OpenUnion |
class order ~ OrderOf e => Elem (e :: Effect) (order :: EffectOrder) where Source #
Methods
inject :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> e f a -> Union es f a Source #
project :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> Union es f a -> Maybe (e f a) Source #
(!:) :: forall (f :: Type -> Type) a r (es :: [Effect]). (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r infixr 5 Source #
extract :: forall (f :: Type -> Type) a. Union '[e] f a -> e f a Source #
Instances
FirstOrder e => Elem e 'FirstOrder Source # | |
Defined in Data.Effect.OpenUnion Methods inject :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> e f a -> Union es f a Source # project :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> Union es f a -> Maybe (e f a) Source # (!:) :: forall (f :: Type -> Type) a r (es :: [Effect]). (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r Source # extract :: forall (f :: Type -> Type) a. Union '[e] f a -> e f a Source # | |
(OrderOf e ~ 'HigherOrder, HFunctor e) => Elem e 'HigherOrder Source # | |
Defined in Data.Effect.OpenUnion Methods inject :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> e f a -> Union es f a Source # project :: forall (es :: [Effect]) (f :: Type -> Type) a. Membership e es -> Union es f a -> Maybe (e f a) Source # (!:) :: forall (f :: Type -> Type) a r (es :: [Effect]). (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r Source # extract :: forall (f :: Type -> Type) a. Union '[e] f a -> e f a Source # |
decomp :: forall e (es :: [Effect]) (f :: Type -> Type) a. (KnownOrder e, HFunctor e) => Union (e ': es) f a -> Either (e f a) (Union es f a) Source #
projectAnyOrder :: forall e (es :: [Effect]) (f :: Type -> Type) a. HFunctor e => Membership e es -> Union es f a -> Maybe (e f a) Source #
caseAnyOrder :: forall e (f :: Type -> Type) a r (es :: [Effect]). HFunctor e => (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r infixr 5 Source #
extractAnyOrder :: forall e (es :: [Effect]) (f :: Type -> Type) a. HFunctor e => Union es f a -> e f a Source #
hfmapDynUnsafeCoerce :: HFunctor e' => EffectOrder -> (forall x. f x -> g x) -> e f a -> e' g a Source #
nilMembership :: forall (e :: Effect) r. Membership e ('[] :: [Effect]) -> r Source #
weakensFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect). Suffix es es' => Membership e es -> Membership e es' Source #
class SuffixUnder (es :: [Effect]) (es' :: [Effect]) where Source #
Instances
Suffix es es' => SuffixUnder es es' Source # | |
Defined in Data.Effect.OpenUnion | |
SuffixUnder es es' => SuffixUnder (e ': es) (e ': es') Source # | |
Defined in Data.Effect.OpenUnion |
weakensUnderFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect). SuffixUnder es es' => Membership e es -> Membership e es' Source #
type family RemoveHOEs (es :: [Effect]) :: [Effect] where ... Source #
Equations
RemoveHOEs ('[] :: [Effect]) = '[] :: [Effect] | |
RemoveHOEs (e ': es) = OrderCase (OrderOf e) (e ': RemoveHOEs es) (RemoveHOEs es) |
type WeakenHOEs (es :: [Effect]) = (WeakenHOEs_ es 0 (OrderOf (HeadOf es)), FOEs (RemoveHOEs es)) Source #
class orderOfHead ~ OrderOf (HeadOf es) => WeakenHOEs_ (es :: [Effect]) (countF :: Natural) (orderOfHead :: EffectOrder) where Source #
Methods
foldHoeIndexShifter :: (Int -> Int) -> Int -> Int Source #
Example for '[H,F,F,H,H,F,H,F]
ix | order | countF | shifter accumulation |
---|---|---|---|
0 | H | 0 | 01234... -> 12345... |
1 | F | 0 | 01234... -> 12345... |
2 | F | 1 | 01234... -> 12345... |
3 | H | 2 | 01234... -> 12456... |
4 | H | 2 | 01234... -> 12567... |
5 | F | 2 | 01234... -> 12567... |
6 | H | 3 | 01234... -> 12578... |
7 | F | 3 | 01234... -> 12578... |
Instances
OrderOf (HeadOf ('[] :: [Effect])) ~ orderOfHead => WeakenHOEs_ ('[] :: [Effect]) countF orderOfHead Source # | |
Defined in Data.Effect.OpenUnion | |
(FirstOrder e, WeakenHOEs_ es (countF + 1) _orderOfHead) => WeakenHOEs_ (e ': es) countF 'FirstOrder Source # | |
Defined in Data.Effect.OpenUnion | |
(OrderOf e ~ 'HigherOrder, WeakenHOEs_ es countF _orderOfHead, KnownNat countF) => WeakenHOEs_ (e ': es) countF 'HigherOrder Source # | |
Defined in Data.Effect.OpenUnion |
type family RemoveExps (es :: [Effect]) :: [Effect] where ... Source #
Equations
RemoveExps ('[] :: [Effect]) = '[] :: [Effect] | |
RemoveExps (e ': es) = FormCase (FormOf e) (e ': RemoveExps es) (RemoveExps es) |
type WeakenExps (es :: [Effect]) = (WeakenExps_ es 0 (FormOf (HeadOf es)), PolyHFunctors (RemoveExps es)) Source #
class formOfHead ~ FormOf (HeadOf es) => WeakenExps_ (es :: [Effect]) (countP :: Natural) (formOfHead :: EffectForm) where Source #
Instances
FormOf (HeadOf ('[] :: [Effect])) ~ formOfHead => WeakenExps_ ('[] :: [Effect]) countP formOfHead Source # | |
Defined in Data.Effect.OpenUnion | |
(FormOf e ~ 'Exponential, WeakenExps_ es countP _formOfHead, KnownNat countP) => WeakenExps_ (e ': es) countP 'Exponential Source # | |
Defined in Data.Effect.OpenUnion | |
(PolyHFunctor e, WeakenExps_ es (countP + 1) _formOfHead) => WeakenExps_ (e ': es) countP 'Polynomial Source # | |
Defined in Data.Effect.OpenUnion |
weaken :: forall (es :: [Effect]) (f :: Type -> Type) a (e :: Effect). Union es f a -> Union (e ': es) f a Source #
weakens :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. Suffix es es' => Union es f a -> Union es' f a Source #
weakensUnder :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. SuffixUnder es es' => Union es f a -> Union es' f a Source #
weakenHOEsFor :: forall (es :: [Effect]) (e :: Effect). WeakenHOEs es => Membership e (RemoveHOEs es) -> Membership e es Source #
weakenHOEs :: forall (es :: [Effect]) (f :: Type -> Type) a. WeakenHOEs es => Union (RemoveHOEs es) f a -> Union es f a Source #
weakenExpsFor :: forall (es :: [Effect]) (e :: Effect). WeakenExps es => Membership e (RemoveExps es) -> Membership e es Source #
weakenExps :: forall (es :: [Effect]) (f :: Type -> Type) a. WeakenExps es => Union (RemoveExps es) f a -> Union es f a Source #
class KnownLength (xs :: [k]) where Source #
Methods
reifyLength :: Int Source #
Instances
KnownLength ('[] :: [k]) Source # | |
Defined in Data.Effect.OpenUnion Methods reifyLength :: Int Source # | |
KnownLength xs => KnownLength (x ': xs :: [k]) Source # | |
Defined in Data.Effect.OpenUnion Methods reifyLength :: Int Source # |
(!++) :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a r. KnownLength es => (Union es f a -> r) -> (Union es' f a -> r) -> Union (es ++ es') f a -> r infixr 5 Source #
bundleUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength es => Union (es ++ es') f a -> Union (Union es ': es') f a Source #
unbundleUnion :: forall (es :: [Effect]) (es' :: [(Type -> Type) -> Type -> Type]) (f :: Type -> Type) a. KnownLength es => Union (Union es ': es') f a -> Union (es ++ es') f a Source #
splitUnion :: forall (es :: [Effect]) (es' :: [Effect]) (es'' :: [Effect]) (f :: Type -> Type) a. KnownLength es => (forall (e :: Effect). Membership e es -> Membership e es'') -> (forall (e :: Effect). Membership e es' -> Membership e es'') -> Union (es ++ es') f a -> Union es'' f a Source #
mergeUnion :: forall (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength es => Either (Union es f a) (Union es' f a) -> Union (es ++ es') f a Source #
splitUnion1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (es' :: [Effect]) (f :: Type -> Type) a. KnownLength fs => (forall (e :: Effect). Membership e (Each fs x) -> Membership e es') -> (forall (e :: Effect). Membership e es -> Membership e es') -> Union (Each fs x ++ es) f a -> Union es' f a Source #
mergeUnion1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (f :: Type -> Type) a. KnownLength fs => Either (Union (Each fs x) f a) (Union es f a) -> Union (Each fs x ++ es) f a Source #
splitFor :: forall (es :: [Effect]) (es' :: [Effect]) (e :: Effect) r. KnownLength es => (Membership e es -> r) -> (Membership e es' -> r) -> Membership e (es ++ es') -> r Source #
splitFor1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (e :: Effect) r. KnownLength fs => (Membership e (Each fs x) -> r) -> (Membership e es -> r) -> Membership e (Each fs x ++ es) -> r Source #
suffixFor :: forall (es' :: [Effect]) (es :: [Effect]) (e :: Effect). Membership e es -> Membership e (es ++ es') Source #
prefixFor :: forall (es' :: [Effect]) (es :: [Effect]) (e :: Effect). KnownLength es' => Membership e es -> Membership e (es' ++ es) Source #
prefixFor1 :: forall {k} (fs :: [k -> Effect]) (x :: k) (es :: [Effect]) (e :: Effect). KnownLength fs => Membership e es -> Membership e (Each fs x ++ es) Source #
data Ordership (o :: EffectOrder) (e :: Effect) (f :: Type -> Type) (g :: Type -> Type) where Source #
Constructors
UnsafeFirst :: forall (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). Ordership 'FirstOrder e f g | |
UnsafeHigher :: forall (g :: Type -> Type) (f :: Type -> Type) (e :: Effect). (forall x. g x -> f x) -> Ordership 'HigherOrder e f g |
union :: forall (es :: [Effect]) (f :: Type -> Type) a r. (forall (e :: Effect) (o :: EffectOrder) (g :: Type -> Type). Membership e es -> Ordership o e f g -> e g a -> r) -> Union es f a -> r Source #
mkUnion :: forall e (es :: [Effect]) (o :: EffectOrder) (f :: Type -> Type) (g :: Type -> Type) a. Membership e es -> Ordership o e f g -> e g a -> Union es f a Source #
firstOrdership :: forall (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). FirstOrder e => Ordership 'FirstOrder e f g Source #
higherOrdership :: forall (e :: Effect) g f. OrderOf e ~ 'HigherOrder => (forall x. g x -> f x) -> Ordership 'HigherOrder e f g Source #
shrinkOrdership :: forall (o :: EffectOrder) (e :: Effect) (f :: Type -> Type) (g :: Type -> Type). Ordership o e f g -> Ordership (OrderOf e) e f g Source #
continuationOfInterpretation :: forall (e :: Effect) f g. Ordership 'HigherOrder e f g -> forall x. g x -> f x Source #