Expected interface for pure expressions that can be used to specialize the Imperative dialect.
- Ident : Type
Kinds of identifiers allowed in expressions. We expect identifiers to have decidable equality; see
EqIdent. - EqIdent : DecidableEq self.Ident
- Expr : Type
Expressions
- Ty : Type
Types
- ExprMetadata : Type
Expression metadata type (for use in function declarations, etc.)
- TyEnv : Type
Typing environment, expected to contain a map of variables to their types, type substitution, etc.
- TyContext : Type
Typing context, expected to contain information that does not change during type checking/inference (e.g., known types and known functions.)
- EvalEnv : Type
Evaluation environment
Instances For
Type Classes for Expressions #
Integer ordering primitives.
zero is the lower-bound constant for well-foundedness (measure ≥ 0).
intTy is the type of integer expressions, for variable declarations.
ge is derivable as HasNot.not (lt b a) and is therefore omitted.
Instances
Instances
Substitution of free variables in expressions. Used for closure capture in function declarations.
Substitute a single free variable with an expression
Simultaneously substitute multiple free variables with expressions. Replaces all variables in a single pass, avoiding capture between substitutions.
Instances
A function declaration for use with PureExpr - instantiation of Func for
any expression system that implements the PureExpr interface.
Equations
- Imperative.PureFunc P = Strata.DL.Util.Func P.Ident P.Expr P.Ty P.ExprMetadata