symantic-6.3.3.20190614: Library for Typed Tagless-Final Higher-Order Composable DSL

Safe HaskellNone
LanguageHaskell2010

Language.Symantic.Typing.Variable

Contents

Synopsis

Type Var

data Var src (vs :: [Type]) (v :: kv) where Source #

A type variable, indexed amongst a type-level list. v is wrapped within a Proxy to have a kind-heterogeneous list.

Constructors

VarZ :: Kind src kv -> Len (Proxy (v :: kv) ': vs) -> Var src (Proxy (v :: kv) ': vs) (v :: kv) 
VarS :: Var src vs v -> Var src (not_v ': vs) v infixr 5 
Instances
AllocVars (Var src :: [Type] -> k -> Type) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

allocVarsL :: Len len -> Var src vs x -> Var src (len ++ vs) x Source #

allocVarsR :: Len len -> Var src vs x -> Var src (vs ++ len) x Source #

SourceInj (EVar src vs) src => KindOf (Var src vs :: kt -> Type) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

kindOf :: Var src vs t -> Kind (SourceOf (Var src vs t)) kt0 Source #

Show (Var src tys v) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

showsPrec :: Int -> Var src tys v -> ShowS #

show :: Var src tys v -> String #

showList :: [Var src tys v] -> ShowS #

LenVars (Var src vs v) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: Var src vs v -> Len (VarsOf (Var src vs v)) Source #

type SourceOf (Var src vs t) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type SourceOf (Var src vs t) = src
type VarsOf (Var src vs v) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (Var src vs v) = vs

varZ :: forall src vs kv (v :: kv). Source src => LenInj vs => KindInj kv => Var src (Proxy v ': vs) v Source #

kindOfVar :: Var src vs (v :: kv) -> Kind src kv Source #

Return the Kind of given Var.

Comparison

eqVar :: Var xs vs x -> Var ys vs y -> Maybe (x :~: y) Source #

eqVarKi :: Var xs vs x -> Var ys vs y -> Maybe ((x :: kx) :~~: (y :: ky)) Source #

ordVarKi :: Var xs vs x -> Var ys vs y -> Ordering Source #

Type EVar

data EVar src vs Source #

Existential Var.

Constructors

EVar (Var src vs v) 

Type IndexVar

type IndexVar = Int Source #

Index of a Var.

indexVar :: Var src vs v -> Int Source #

Class LenVars

class LenVars a where Source #

Return the Len of the Var context.

Methods

lenVars :: a -> Len (VarsOf a) Source #

Instances
LenVars (Vars src vs) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: Vars src vs -> Len (VarsOf (Vars src vs)) Source #

LenVars (UsedVars src vs vs') Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: UsedVars src vs vs' -> Len (VarsOf (UsedVars src vs vs')) Source #

LenVars (Var src vs v) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: Var src vs v -> Len (VarsOf (Var src vs v)) Source #

LenVars (Type src vs t) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

lenVars :: Type src vs t -> Len (VarsOf (Type src vs t)) Source #

LenVars (Term src ss ts vs t) Source # 
Instance details

Defined in Language.Symantic.Compiling.Term

Methods

lenVars :: Term src ss ts vs t -> Len (VarsOf (Term src ss ts vs t)) Source #

Class AllocVars

class AllocVars (a :: [Type] -> k -> Type) where Source #

Allocate Vars in a Var context, either to the left or to the right.

Methods

allocVarsL :: Len len -> a vs x -> a (len ++ vs) x Source #

allocVarsR :: Len len -> a vs x -> a (vs ++ len) x Source #

Instances
AllocVars (Var src :: [Type] -> k -> Type) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

allocVarsL :: Len len -> Var src vs x -> Var src (len ++ vs) x Source #

allocVarsR :: Len len -> Var src vs x -> Var src (vs ++ len) x Source #

AllocVars (Type src :: [Type] -> k -> Type) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

allocVarsL :: Len len -> Type src vs x -> Type src (len ++ vs) x Source #

allocVarsR :: Len len -> Type src vs x -> Type src (vs ++ len) x Source #

AllocVars (Term src ss ts :: [Type] -> Type -> Type) Source # 
Instance details

Defined in Language.Symantic.Compiling.Term

Methods

allocVarsL :: Len len -> Term src ss ts vs x -> Term src ss ts (len ++ vs) x Source #

allocVarsR :: Len len -> Term src ss ts vs x -> Term src ss ts (vs ++ len) x Source #

appendVars :: AllocVars a => AllocVars b => LenVars (a vs_x x) => LenVars (b vs_y y) => VarsOf (a vs_x x) ~ vs_x => VarsOf (b vs_y y) ~ vs_y => a vs_x (x :: kx) -> b vs_y (y :: ky) -> (a (vs_x ++ vs_y) x, b (vs_x ++ vs_y) y) Source #

Type NameVar

newtype NameVar Source #

Constructors

NameVar Text 

Class VarOccursIn

class VarOccursIn a where Source #

Test whether a given Var occurs within something.

Methods

varOccursIn :: Var src (VarsOf a) v -> a -> Bool Source #

Instances
VarOccursIn (Types src vs ts) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

varOccursIn :: Var src0 (VarsOf (Types src vs ts)) v -> Types src vs ts -> Bool Source #

VarOccursIn (Type src vs t) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

varOccursIn :: Var src0 (VarsOf (Type src vs t)) v -> Type src vs t -> Bool Source #

Type family VarsOf

type family VarsOf a :: [Type] Source #

Return the Var context of something.

Instances
type VarsOf (Vars src vs) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (Vars src vs) = vs
type VarsOf (TypeT src vs) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

type VarsOf (TypeT src vs) = vs
type VarsOf (UsedVars src vs vs') Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (UsedVars src vs vs') = vs'
type VarsOf (Types src vs ts) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

type VarsOf (Types src vs ts) = vs
type VarsOf (TypeK src vs ki) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

type VarsOf (TypeK src vs ki) = vs
type VarsOf (Var src vs v) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (Var src vs v) = vs
type VarsOf (Type src vs t) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

type VarsOf (Type src vs t) = vs
type VarsOf (Term src ss ts vs t) Source # 
Instance details

Defined in Language.Symantic.Compiling.Term

type VarsOf (Term src ss ts vs t) = vs

Type Vars

data Vars src vs where Source #

Growable list of Vars.

Constructors

VarsZ :: Vars src '[] 
VarsS :: NameVar -> Kind src kv -> Vars src vs -> Vars src (Proxy (v :: kv) ': vs) 
Instances
LenVars (Vars src vs) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: Vars src vs -> Len (VarsOf (Vars src vs)) Source #

type VarsOf (Vars src vs) Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (Vars src vs) = vs

lookupVars :: NameVar -> Vars src vs -> Maybe (EVar src vs) Source #

insertVars :: NameVar -> Kind src k -> Vars src vs -> (forall vs'. Vars src vs' -> ret) -> ret Source #

Type EVars

data EVars src Source #

Existential Vars.

Constructors

EVars (Vars src vs) 

Type UsedVars

data UsedVars src vs vs' where Source #

List of Vars, used to change the context of a Var when removing unused Vars.

Constructors

UsedVarsZ :: UsedVars src vs '[] 
UsedVarsS :: Var src vs (v :: k) -> UsedVars src vs vs' -> UsedVars src vs (Proxy v ': vs') 
Instances
LenVars (UsedVars src vs vs') Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

Methods

lenVars :: UsedVars src vs vs' -> Len (VarsOf (UsedVars src vs vs')) Source #

type VarsOf (UsedVars src vs vs') Source # 
Instance details

Defined in Language.Symantic.Typing.Variable

type VarsOf (UsedVars src vs vs') = vs'

lookupUsedVars :: Var src vs v -> UsedVars src vs vs' -> Maybe (Var src vs' v) Source #

insertUsedVars :: Var src vs v -> UsedVars src vs vs' -> Maybe (UsedVars src vs (Proxy v ': vs')) Source #

Class UsedVarsOf

class UsedVarsOf a where Source #

Methods

usedVarsOf :: UsedVars (SourceOf a) (VarsOf a) vs -> a -> (forall vs'. UsedVars (SourceOf a) (VarsOf a) vs' -> ret) -> ret Source #

Instances
UsedVarsOf (Types src vs ts) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

usedVarsOf :: UsedVars (SourceOf (Types src vs ts)) (VarsOf (Types src vs ts)) vs0 -> Types src vs ts -> (forall (vs' :: [Type]). UsedVars (SourceOf (Types src vs ts)) (VarsOf (Types src vs ts)) vs' -> ret) -> ret Source #

UsedVarsOf (Type src vs t) Source # 
Instance details

Defined in Language.Symantic.Typing.Type

Methods

usedVarsOf :: UsedVars (SourceOf (Type src vs t)) (VarsOf (Type src vs t)) vs0 -> Type src vs t -> (forall (vs' :: [Type0]). UsedVars (SourceOf (Type src vs t)) (VarsOf (Type src vs t)) vs' -> ret) -> ret Source #

Type UnProxy

type family UnProxy (x :: Type) :: k where ... Source #

Equations

UnProxy (Proxy x) = x