heftia-0.3.1.0: higher-order effects done right
Copyright(c) 2023 Yamada Ryo
LicenseMPL-2.0 (see the file LICENSE)
Maintainerymdfield@outlook.jp
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Data.Hefty.Extensible

Description

An implementation of an open union for higher-order effects using the extensible package as a backend.

Synopsis

Documentation

type EffF fr es = EffF ExtensibleUnion fr es Source #

type Eff fr eh ef = Eff ExtensibleUnion fr eh ef Source #

type S ef = S ExtensibleUnion ef Source #

type U ef = U ExtensibleUnion ef 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 FieldApp f a (e :: SigClass) Source #

Constructors

FieldApp 

Fields

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

Instances details
Union ExtensibleUnion Source # 
Instance details

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

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

Defined in Data.Hefty.Extensible

type ForallHFunctor ExtensibleUnion Source # 
Instance details

Defined in Data.Hefty.Extensible

type HasMembership ExtensibleUnion e es Source # 
Instance details

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

henumerateFor, hgenerateListFor

Instances

Instances details
Forall (c :: k -> Constraint) ('[] :: [k]) 
Instance details

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]) 
Instance details

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

Defined in Data.Hefty.Extensible