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
Decidable equality on identifiers.
- 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.)
- Factory : Type
Factory for function/operator resolution
The expression evaluator. Takes a factory, a variable store, and an expression, and returns an optional evaluated expression.
Instances For
Type Classes for Expressions #
Lawfulness of HasIdent: the canonical identifier-injection is injective.
- ident_inj : Function.Injective HasIdent.ident
Instances
A free variable carrying its type. A pass that introduces a variable after type checking has run must annotate it itself, since nothing downstream will.
Instances
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
Lawfulness of HasFvars against HasFvar: the free-variable list of an
mkFvar x expression, as computed by the HasFvars.getFvars extractor, is a
subset of [x].
The annotation contributes no free variables of its own.
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