Copyright | (c) 2023 Yamada Ryo |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
Data.Hefty.Extensible
Description
An implementation of an open union for higher-order effects using the extensible package as a backend.
Synopsis
- type EffF fr es = EffF ExtensibleUnion fr es
- type Eff fr eh ef = Eff ExtensibleUnion fr eh ef
- type SH eh = SH ExtensibleUnion eh
- type S ef = S ExtensibleUnion ef
- type UH eh = UH ExtensibleUnion eh
- type U ef = U ExtensibleUnion ef
- type ForallHFunctor = Forall HFunctor
- type MemberHBy key e ehs = MemberHBy ExtensibleUnion key e ehs
- type MemberBy key e efs = MemberBy ExtensibleUnion key e efs
- type (<<|) e es = MemberH ExtensibleUnion e es
- type (<|) e es = Member ExtensibleUnion e es
- newtype FieldApp f a (e :: SigClass) = FieldApp {
- unFieldApp :: e f a
- newtype ExtensibleUnion es f a = ExtensibleUnion {
- unExtensibleUnion :: es :/ FieldApp f a
- findFirstMembership :: forall xs x. KnownNat (ClassIndex xs x) => Membership xs x
- class (ForallF c xs, Generate xs) => Forall (c :: k -> Constraint) (xs :: [k])
Documentation
type EffF fr es = EffF ExtensibleUnion fr es Source #
type Eff fr eh ef = Eff ExtensibleUnion fr eh ef Source #
type SH eh = SH ExtensibleUnion eh Source #
type S ef = S ExtensibleUnion ef Source #
type UH eh = UH ExtensibleUnion eh Source #
type U ef = U ExtensibleUnion ef Source #
type ForallHFunctor = Forall HFunctor Source #
type MemberHBy key e ehs = MemberHBy ExtensibleUnion key e ehs Source #
type MemberBy key e efs = MemberBy ExtensibleUnion key e efs Source #
type (<<|) e es = MemberH ExtensibleUnion e es infix 3 Source #
type (<|) e es = Member ExtensibleUnion e es infix 3 Source #
newtype ExtensibleUnion es f a Source #
An implementation of an open union for higher-order effects using the extensible package as a backend.
Constructors
ExtensibleUnion | |
Fields
|
Instances
Union ExtensibleUnion Source # | |
Defined in Data.Hefty.Extensible Associated Types type HasMembership ExtensibleUnion e es Source # Methods inject :: forall (e :: SigClass) (es :: [SigClass]) (f :: Type -> Type). HasMembership ExtensibleUnion e es => e f ~> ExtensibleUnion es f Source # project :: forall e (es :: [SigClass]) (f :: Type -> Type) a. HasMembership ExtensibleUnion e es => ExtensibleUnion es f a -> Maybe (e f a) Source # exhaust :: forall (f :: Type -> Type) a x. ExtensibleUnion '[] f a -> x Source # comp :: forall e (f :: Type -> Type) a (es :: [SigClass]). Either (e f a) (ExtensibleUnion es f a) -> ExtensibleUnion (e ': es) f a Source # decomp :: forall (e :: SigClass) (es :: [SigClass]) (f :: Type -> Type) a. ExtensibleUnion (e ': es) f a -> (e :+: ExtensibleUnion es) f a Source # (|+:) :: forall e (f :: Type -> Type) a r (es :: [SigClass]). (e f a -> r) -> (ExtensibleUnion es f a -> r) -> ExtensibleUnion (e ': es) f a -> r Source # inject0 :: forall (e :: (Type -> Type) -> Type -> Type) (f :: Type -> Type) (es :: [(Type -> Type) -> Type -> Type]). e f ~> ExtensibleUnion (e ': es) f Source # injectUnder :: forall (h2 :: (Type -> Type) -> Type -> Type) (f :: Type -> Type) (h1 :: (Type -> Type) -> Type -> Type) (es :: [(Type -> Type) -> Type -> Type]). h2 f ~> ExtensibleUnion (h1 ': (h2 ': es)) f Source # injectUnder2 :: forall (h3 :: (Type -> Type) -> Type -> Type) (f :: Type -> Type) (h1 :: (Type -> Type) -> Type -> Type) (h2 :: (Type -> Type) -> Type -> Type) (es :: [(Type -> Type) -> Type -> Type]). h3 f ~> ExtensibleUnion (h1 ': (h2 ': (h3 ': es))) f Source # injectUnder3 :: forall (h4 :: (Type -> Type) -> Type -> Type) (f :: Type -> Type) (h1 :: (Type -> Type) -> Type -> Type) (h2 :: (Type -> Type) -> Type -> Type) (h3 :: (Type -> Type) -> Type -> Type) (es :: [(Type -> Type) -> Type -> Type]). h4 f ~> ExtensibleUnion (h1 ': (h2 ': (h3 ': (h4 ': es)))) f Source # weaken :: forall (es :: [SigClass]) (f :: Type -> Type) (e :: SigClass). ExtensibleUnion es f ~> ExtensibleUnion (e ': es) f Source # weaken2 :: forall (es :: [SigClass]) (f :: Type -> Type) (e1 :: SigClass) (e2 :: SigClass). ExtensibleUnion es f ~> ExtensibleUnion (e1 ': (e2 ': es)) f Source # weaken3 :: forall (es :: [SigClass]) (f :: Type -> Type) (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass). ExtensibleUnion es f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f Source # weaken4 :: forall (es :: [SigClass]) (f :: Type -> Type) (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (e4 :: SigClass). ExtensibleUnion es f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source # weakenUnder :: forall (e1 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e2 :: SigClass). ExtensibleUnion (e1 ': es) f ~> ExtensibleUnion (e1 ': (e2 ': es)) f Source # weakenUnder2 :: forall (e1 :: SigClass) (e2 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e3 :: SigClass). ExtensibleUnion (e1 ': (e2 ': es)) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f Source # weakenUnder3 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e4 :: SigClass). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source # weaken2Under :: forall (e1 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e2 :: SigClass) (e3 :: SigClass). ExtensibleUnion (e1 ': es) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f Source # weaken2Under2 :: forall (e1 :: SigClass) (e2 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e3 :: SigClass) (e4 :: SigClass). ExtensibleUnion (e1 ': (e2 ': es)) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source # weaken3Under :: forall (e1 :: SigClass) (es :: [SigClass]) (f :: Type -> Type) (e2 :: SigClass) (e3 :: SigClass) (e4 :: SigClass). ExtensibleUnion (e1 ': es) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source # flipUnion :: forall (e1 :: SigClass) (e2 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': es)) f ~> ExtensibleUnion (e2 ': (e1 ': es)) f Source # flipUnion3 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (e3 ': (e2 ': (e1 ': es))) f Source # flipUnionUnder :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (e1 ': (e3 ': (e2 ': es))) f Source # rot3 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (e2 ': (e3 ': (e1 ': es))) f Source # rot3' :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (e3 ': (e1 ': (e2 ': es))) f Source # bundleUnion2 :: forall (e1 :: SigClass) (e2 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': es)) f ~> ExtensibleUnion (ExtensibleUnion '[e1, e2] ': es) f Source # bundleUnion3 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f ~> ExtensibleUnion (ExtensibleUnion '[e1, e2, e3] ': es) f Source # bundleUnion4 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (e4 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f ~> ExtensibleUnion (ExtensibleUnion '[e1, e2, e3, e4] ': es) f Source # unbundleUnion2 :: forall (e1 :: SigClass) (e2 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (ExtensibleUnion '[e1, e2] ': es) f ~> ExtensibleUnion (e1 ': (e2 ': es)) f Source # unbundleUnion3 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (ExtensibleUnion '[e1, e2, e3] ': es) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': es))) f Source # unbundleUnion4 :: forall (e1 :: SigClass) (e2 :: SigClass) (e3 :: SigClass) (e4 :: SigClass) (es :: [SigClass]) (f :: Type -> Type). ExtensibleUnion (ExtensibleUnion '[e1, e2, e3, e4] ': es) f ~> ExtensibleUnion (e1 ': (e2 ': (e3 ': (e4 ': es)))) f Source # | |
Forall HFunctor es => HFunctor (ExtensibleUnion es) Source # | |
Defined in Data.Hefty.Extensible Methods hfmap :: forall (f :: Type -> Type) (g :: Type -> Type). (f :-> g) -> ExtensibleUnion es f :-> ExtensibleUnion es g # | |
HFunctorUnion_ (Forall HFunctor) ExtensibleUnion Source # | |
Defined in Data.Hefty.Extensible Associated Types type ForallHFunctor ExtensibleUnion :: [SigClass] -> Constraint Source # | |
type ForallHFunctor ExtensibleUnion Source # | |
Defined in Data.Hefty.Extensible | |
type HasMembership ExtensibleUnion e es Source # | |
Defined in Data.Hefty.Extensible |
findFirstMembership :: forall xs x. KnownNat (ClassIndex xs x) => Membership xs x Source #
class (ForallF c xs, Generate xs) => Forall (c :: k -> Constraint) (xs :: [k]) #
Every element in xs
satisfies c
Minimal complete definition
Instances
Forall (c :: k -> Constraint) ('[] :: [k]) | |
Defined in Type.Membership Methods henumerateFor :: proxy c -> proxy' '[] -> (forall (x :: k0). c x => Membership '[] x -> r -> r) -> r -> r # hgenerateListFor :: Applicative f => proxy c -> (forall (x :: k0). c x => Membership '[] x -> f (h x)) -> f (HList h '[]) # | |
(c x, Forall c xs) => Forall (c :: a -> Constraint) (x ': xs :: [a]) | |
Defined in Type.Membership Methods henumerateFor :: proxy c -> proxy' (x ': xs) -> (forall (x0 :: k). c x0 => Membership (x ': xs) x0 -> r -> r) -> r -> r # hgenerateListFor :: Applicative f => proxy c -> (forall (x0 :: k). c x0 => Membership (x ': xs) x0 -> f (h x0)) -> f (HList h (x ': xs)) # | |
HFunctorUnion_ (Forall HFunctor) ExtensibleUnion Source # | |
Defined in Data.Hefty.Extensible Associated Types type ForallHFunctor ExtensibleUnion :: [SigClass] -> Constraint Source # |