| 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 #