Copyright | (c) 2024-2025 Sayo contributors |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
Data.Effect.OpenUnion
Description
Documentation
data Union (es :: [Effect]) (f :: Type -> Type) (a :: Type) where Source #
Constructors
UnsafeUnion | |
Fields
|
hfmapUnion :: (forall x. f x -> g x) -> Union es f a -> Union es g a Source #
Instances
FOEs ('[] :: [k]) Source # | |
Defined in Data.Effect.OpenUnion | |
(FirstOrder e, FOEs es) => FOEs (e ': es :: [Effect]) Source # | |
Defined in Data.Effect.OpenUnion |
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 :: Membership e (e ': es) Source #
pattern There :: Membership e es -> Membership e (e ': es) Source #
weakenFor :: Membership e es -> Membership e (e' ': es) Source #
mapUnion :: forall es es' f a. (forall e. Membership e es -> Membership e es') -> Union es f a -> Union es' f a Source #
membershipAt :: forall i es. KnownNat i => Membership (At i es) es Source #
compareMembership :: 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 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 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 es = MemberBy LabelResolver (Discriminator LabelResolver e) e es infix 4 Source #
type Has key e es = MemberBy KeyResolver (KeyDiscriminator key) (e # key) es Source #
type In e es = MemberBy IdentityResolver (IdentityDiscriminator e) e es infix 4 Source #
type KnownIndex i es = (KnownNat i, KnownOrder (At i es)) Source #
type FindByLabel label e es = MemberBy LabelResolver label e es Source #
type MemberBy resolver dscr e es = (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 r | 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 es. FindBy resolver dscr (Discriminator resolver (HeadOf es)) e es => Membership e es Source #
labelMembership :: forall e es. FindBy LabelResolver (LabelOf e) (LabelOf (HeadOf es)) e es => Membership e es Source #
keyMembership :: forall key e es. FindBy KeyResolver (KeyDiscriminator key) (KeyOf (HeadOf es)) (e # key) es => Membership (e # key) es Source #
identityMembership :: forall e es. 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 |
type KnownOrder e = Elem e (OrderOf e) Source #
class order ~ OrderOf e => Elem e order where Source #
Methods
inject :: Membership e es -> e f a -> Union es f a Source #
project :: Membership e es -> Union es f a -> Maybe (e f a) Source #
(!:) :: (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r infixr 5 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 :: (KnownOrder e, HFunctor e) => Union (e ': es) f a -> Either (e f a) (Union es f a) Source #
projectAnyOrder :: forall e es f a. HFunctor e => Membership e es -> Union es f a -> Maybe (e f a) Source #
caseAnyOrder :: HFunctor e => (e f a -> r) -> (Union es f a -> r) -> Union (e ': es) f a -> r infixr 5 Source #
extractAnyOrder :: 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 :: Membership e '[] -> r Source #
weakensFor :: forall es es' e. 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 es' e. SuffixUnder es es' => Membership e es -> Membership e es' Source #
type family RemoveHOEs (es :: [Effect]) where ... Source #
Equations
RemoveHOEs '[] = '[] | |
RemoveHOEs (e ': es) = OrderCase (OrderOf e) (e ': RemoveHOEs es) (RemoveHOEs es) |
type WeakenHOEs es = (WeakenHOEs_ es 0 (OrderOf (HeadOf es)), FOEs (RemoveHOEs es)) Source #
class orderOfHead ~ OrderOf (HeadOf es) => WeakenHOEs_ es (countF :: Natural) orderOfHead 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 |
weakensUnder :: SuffixUnder es es' => Union es f a -> Union es' f a Source #
weakenHOEsFor :: forall es e. WeakenHOEs es => Membership e (RemoveHOEs es) -> Membership e es Source #
weakenHOEs :: forall es f a. WeakenHOEs es => Union (RemoveHOEs es) f a -> Union es f a Source #
class KnownLength xs 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 es' f 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 es' f a. KnownLength es => Union (es ++ es') f a -> Union (Union es ': es') f a Source #
unbundleUnion :: forall es es' f a. KnownLength es => Union (Union es ': es') f a -> Union (es ++ es') f a Source #
splitUnion :: forall es es' es'' f a. KnownLength es => (forall e. Membership e es -> Membership e es'') -> (forall e. Membership e es' -> Membership e es'') -> Union (es ++ es') f a -> Union es'' f a Source #
mergeUnion :: forall es es' f a. KnownLength es => Either (Union es f a) (Union es' f a) -> Union (es ++ es') f a Source #
splitFor :: forall es es' e r. KnownLength es => (Membership e es -> r) -> (Membership e es' -> r) -> Membership e (es ++ es') -> r Source #
suffixFor :: forall es' es e. Membership e es -> Membership e (es ++ es') Source #
prefixFor :: forall es' es e. KnownLength es' => Membership e es -> Membership e (es' ++ es) Source #
prefixFor1 :: forall fs x es e. 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 :: Ordership 'FirstOrder e f g | |
UnsafeHigher :: (forall x. g x -> f x) -> Ordership 'HigherOrder e f g |
union :: (forall e o g. Membership e es -> Ordership o e f g -> e g a -> r) -> Union es f a -> r Source #
firstOrdership :: FirstOrder e => Ordership 'FirstOrder e f g Source #
higherOrdership :: OrderOf e ~ 'HigherOrder => (forall x. g x -> f x) -> Ordership 'HigherOrder e f g Source #
continuationOfInterpretation :: Ordership 'HigherOrder e f g -> forall x. g x -> f x Source #