hypertypes-0.1.0.2: Typed ASTs
Safe HaskellNone
LanguageHaskell2010

Hyper.Class.Nodes

Description

A class for witness types and lifting of constraints to the child nodes of a HyperType

Synopsis

Documentation

class HNodes (h :: HyperType) where Source #

HNodes allows talking about the child nodes of a HyperType.

Various classes like HFunctor build upon HNodes to provide methods such as hmap which provide a rank-n function for processing child nodes which requires a constraint on the nodes.

Minimal complete definition

Nothing

Associated Types

type HNodesConstraint h (c :: HyperType -> Constraint) :: Constraint Source #

Lift a constraint to apply to the child nodes

type HWitnessType h :: HyperType -> Type Source #

HWitness h n is a witness that n is a node of h.

A value quantified with forall n. HWitness h n -> ... n, is equivalent for a "for-some" where the possible values for n are the nodes of h.

Methods

hLiftConstraint :: HNodesConstraint h c => HWitness h n -> Proxy c -> (c n => r) -> r Source #

Lift a rank-n value with a constraint which the child nodes satisfy to a function from a node witness.

default hLiftConstraint :: (HWitnessType h ~ HWitnessType (Rep1 h), HNodesConstraint h c ~ HNodesConstraint (Rep1 h) c, HNodes (Rep1 h), HNodesConstraint h c) => HWitness h n -> Proxy c -> (c n => r) -> r Source #

Instances

Instances details
HNodes Pure Source # 
Instance details

Defined in Hyper.Type.Pure

Associated Types

type HNodesConstraint Pure c Source #

type HWitnessType Pure :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint Pure c => HWitness Pure n -> Proxy c -> (c n => r) -> r Source #

HNodes Prune Source # 
Instance details

Defined in Hyper.Type.Prune

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint Prune c => HWitness Prune n -> Proxy c -> (c n => r) -> r Source #

HNodes a => HNodes (Ann a) Source # 
Instance details

Defined in Hyper.Combinator.Ann

Associated Types

type HNodesConstraint (Ann a) c Source #

type HWitnessType (Ann a) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Ann a) c => HWitness (Ann a) n -> Proxy c -> (c n => r) -> r Source #

HNodes (ANode c) Source # 
Instance details

Defined in Hyper.Combinator.ANode

Associated Types

type HNodesConstraint (ANode c) c Source #

type HWitnessType (ANode c) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c0 (n :: HyperType) r. HNodesConstraint (ANode c) c0 => HWitness (ANode c) n -> Proxy c0 -> (c0 n => r) -> r Source #

HNodes (F f) Source # 
Instance details

Defined in Hyper.Type.Functor

Associated Types

type HNodesConstraint (F f) c Source #

type HWitnessType (F f) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (F f) c => HWitness (F f) n -> Proxy c -> (c n => r) -> r Source #

HNodes (FuncType typ) Source # 
Instance details

Defined in Hyper.Type.AST.FuncType

Associated Types

type HNodesConstraint (FuncType typ) c Source #

type HWitnessType (FuncType typ) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (FuncType typ) c => HWitness (FuncType typ) n -> Proxy c -> (c n => r) -> r Source #

HNodes t => HNodes (UnifyError t) Source # 
Instance details

Defined in Hyper.Unify.Error

Associated Types

type HNodesConstraint (UnifyError t) c Source #

type HWitnessType (UnifyError t) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (UnifyError t) c => HWitness (UnifyError t) n -> Proxy c -> (c n => r) -> r Source #

HNodes v => HNodes (GTerm v) Source # 
Instance details

Defined in Hyper.Unify.Generalize

Associated Types

type HNodesConstraint (GTerm v) c Source #

type HWitnessType (GTerm v) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (GTerm v) c => HWitness (GTerm v) n -> Proxy c -> (c n => r) -> r Source #

(RNodes t, HNodes (NomVarTypes t)) => HNodes (LoadedNominalDecl t) Source # 
Instance details

Defined in Hyper.Type.AST.Nominal

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (LoadedNominalDecl t) c => HWitness (LoadedNominalDecl t) n -> Proxy c -> (c n => r) -> r Source #

HNodes (NominalDecl typ) Source # 
Instance details

Defined in Hyper.Type.AST.Nominal

Associated Types

type HNodesConstraint (NominalDecl typ) c Source #

type HWitnessType (NominalDecl typ) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (NominalDecl typ) c => HWitness (NominalDecl typ) n -> Proxy c -> (c n => r) -> r Source #

HNodes (App expr) Source # 
Instance details

Defined in Hyper.Type.AST.App

Associated Types

type HNodesConstraint (App expr) c Source #

type HWitnessType (App expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (App expr) c => HWitness (App expr) n -> Proxy c -> (c n => r) -> r Source #

HNodes h => HNodes (Rec1 h) Source # 
Instance details

Defined in Hyper.Class.Nodes

Associated Types

type HNodesConstraint (Rec1 h) c Source #

type HWitnessType (Rec1 h) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Rec1 h) c => HWitness (Rec1 h) n -> Proxy c -> (c n => r) -> r Source #

HNodes (Const a :: AHyperType -> Type) Source # 
Instance details

Defined in Hyper.Class.Nodes

Associated Types

type HNodesConstraint (Const a) c Source #

type HWitnessType (Const a) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Const a) c => HWitness (Const a) n -> Proxy c -> (c n => r) -> r Source #

RNodes h => HNodes (HFlip Ann h) Source # 
Instance details

Defined in Hyper.Combinator.Ann

Associated Types

type HNodesConstraint (HFlip Ann h) c Source #

type HWitnessType (HFlip Ann h) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (HFlip Ann h) c => HWitness (HFlip Ann h) n -> Proxy c -> (c n => r) -> r Source #

RNodes a => HNodes (HFlip GTerm a) Source # 
Instance details

Defined in Hyper.Unify.Generalize

Associated Types

type HNodesConstraint (HFlip GTerm a) c Source #

type HWitnessType (HFlip GTerm a) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (HFlip GTerm a) c => HWitness (HFlip GTerm a) n -> Proxy c -> (c n => r) -> r Source #

HNodes (InferOf e) => HNodes (HFlip InferResult e) Source # 
Instance details

Defined in Hyper.Infer.Result

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (HFlip InferResult e) c => HWitness (HFlip InferResult e) n -> Proxy c -> (c n => r) -> r Source #

(HNodes a, HNodes b) => HNodes (HCompose a b) Source # 
Instance details

Defined in Hyper.Combinator.Compose

Associated Types

type HNodesConstraint (HCompose a b) c Source #

type HWitnessType (HCompose a b) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (HCompose a b) c => HWitness (HCompose a b) n -> Proxy c -> (c n => r) -> r Source #

HNodes (TermMap h expr) Source # 
Instance details

Defined in Hyper.Type.AST.Map

Associated Types

type HNodesConstraint (TermMap h expr) c Source #

type HWitnessType (TermMap h expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (TermMap h expr) c => HWitness (TermMap h expr) n -> Proxy c -> (c n => r) -> r Source #

HNodes (Var v expr) Source # 
Instance details

Defined in Hyper.Type.AST.Var

Associated Types

type HNodesConstraint (Var v expr) c Source #

type HWitnessType (Var v expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Var v expr) c => HWitness (Var v expr) n -> Proxy c -> (c n => r) -> r Source #

HNodes (Scheme varTypes typ) Source # 
Instance details

Defined in Hyper.Type.AST.Scheme

Associated Types

type HNodesConstraint (Scheme varTypes typ) c Source #

type HWitnessType (Scheme varTypes typ) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Scheme varTypes typ) c => HWitness (Scheme varTypes typ) n -> Proxy c -> (c n => r) -> r Source #

HNodes (TypeSig vars term) Source # 
Instance details

Defined in Hyper.Type.AST.TypeSig

Associated Types

type HNodesConstraint (TypeSig vars term) c Source #

type HWitnessType (TypeSig vars term) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (TypeSig vars term) c => HWitness (TypeSig vars term) n -> Proxy c -> (c n => r) -> r Source #

HNodes (FromNom nomId term) Source # 
Instance details

Defined in Hyper.Type.AST.Nominal

Associated Types

type HNodesConstraint (FromNom nomId term) c Source #

type HWitnessType (FromNom nomId term) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (FromNom nomId term) c => HWitness (FromNom nomId term) n -> Proxy c -> (c n => r) -> r Source #

HNodes (ToNom nomId term) Source # 
Instance details

Defined in Hyper.Type.AST.Nominal

Associated Types

type HNodesConstraint (ToNom nomId term) c Source #

type HWitnessType (ToNom nomId term) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (ToNom nomId term) c => HWitness (ToNom nomId term) n -> Proxy c -> (c n => r) -> r Source #

HNodes v => HNodes (NominalInst n v) Source # 
Instance details

Defined in Hyper.Type.AST.Nominal

Associated Types

type HNodesConstraint (NominalInst n v) c Source #

type HWitnessType (NominalInst n v) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n0 :: HyperType) r. HNodesConstraint (NominalInst n v) c => HWitness (NominalInst n v) n0 -> Proxy c -> (c n0 => r) -> r Source #

HNodes (Let v expr) Source # 
Instance details

Defined in Hyper.Type.AST.Let

Associated Types

type HNodesConstraint (Let v expr) c Source #

type HWitnessType (Let v expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Let v expr) c => HWitness (Let v expr) n -> Proxy c -> (c n => r) -> r Source #

HNodes (Lam v expr) Source # 
Instance details

Defined in Hyper.Type.AST.Lam

Associated Types

type HNodesConstraint (Lam v expr) c Source #

type HWitnessType (Lam v expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (Lam v expr) c => HWitness (Lam v expr) n -> Proxy c -> (c n => r) -> r Source #

(HNodes a, HNodes b) => HNodes (a :+: b) Source # 
Instance details

Defined in Hyper.Class.Nodes

Associated Types

type HNodesConstraint (a :+: b) c Source #

type HWitnessType (a :+: b) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (a :+: b) c => HWitness (a :+: b) n -> Proxy c -> (c n => r) -> r Source #

(HNodes a, HNodes b) => HNodes (a :*: b) Source # 
Instance details

Defined in Hyper.Class.Nodes

Associated Types

type HNodesConstraint (a :*: b) c Source #

type HWitnessType (a :*: b) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (a :*: b) c => HWitness (a :*: b) n -> Proxy c -> (c n => r) -> r Source #

HNodes (FlatRowExtends key val rest) Source # 
Instance details

Defined in Hyper.Type.AST.Row

Associated Types

type HNodesConstraint (FlatRowExtends key val rest) c Source #

type HWitnessType (FlatRowExtends key val rest) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (FlatRowExtends key val rest) c => HWitness (FlatRowExtends key val rest) n -> Proxy c -> (c n => r) -> r Source #

HNodes (RowExtend key val rest) Source # 
Instance details

Defined in Hyper.Type.AST.Row

Associated Types

type HNodesConstraint (RowExtend key val rest) c Source #

type HWitnessType (RowExtend key val rest) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (RowExtend key val rest) c => HWitness (RowExtend key val rest) n -> Proxy c -> (c n => r) -> r Source #

HNodes (TypedLam var typ expr) Source # 
Instance details

Defined in Hyper.Type.AST.TypedLam

Associated Types

type HNodesConstraint (TypedLam var typ expr) c Source #

type HWitnessType (TypedLam var typ expr) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (TypedLam var typ expr) c => HWitness (TypedLam var typ expr) n -> Proxy c -> (c n => r) -> r Source #

HNodes h => HNodes (M1 i m h) Source # 
Instance details

Defined in Hyper.Class.Nodes

Associated Types

type HNodesConstraint (M1 i m h) c Source #

type HWitnessType (M1 i m h) :: HyperType -> Type Source #

Methods

hLiftConstraint :: forall c (n :: HyperType) r. HNodesConstraint (M1 i m h) c => HWitness (M1 i m h) n -> Proxy c -> (c n => r) -> r Source #

newtype HWitness h n Source #

Constructors

HWitness (HWitnessType h n) 

_HWitness :: forall h n h n. Iso (HWitness h n) (HWitness h n) (HWitnessType h n) (HWitnessType h n) Source #

(#>) :: (HNodes h, HNodesConstraint h c) => Proxy c -> (c n => r) -> HWitness h n -> r infixr 0 Source #

Proxy c #> r replaces the witness parameter of r@ with a constraint on the witnessed node

(#*#) :: (HNodes h, HNodesConstraint h c) => Proxy c -> (c n => HWitness h n -> r) -> HWitness h n -> r infixr 0 Source #

A variant of #> which does not consume the witness parameter.

Proxy c0 Proxy c1 #> r brings into context both the c0 n and c1 n constraints.

class HNodesHaveConstraint c h where Source #

Defunctionalized HNodesConstraint which can be curried

Methods

hNodesHaveConstraint :: proxy0 c -> proxy1 h -> Dict (HNodesConstraint h c) Source #

Instances

Instances details
HNodesConstraint h c => HNodesHaveConstraint c h Source # 
Instance details

Defined in Hyper.Class.Nodes

Methods

hNodesHaveConstraint :: proxy0 c -> proxy1 h -> Dict (HNodesConstraint h c) Source #