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 #
Multi-variable version of HasFvar.getFvar: returns ALL free variables in
a (possibly compound) expression. HasFvar.getFvar only returns Some when
the expression is a single fvar atom; HasFvars.getFvars recurses into
compounds.
Instances
Boolean operations: not, and, imp.
Instances
Integer constants and the integer type.
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