Datatype Support for DDM #
This module provides datatype-related types and functions for the DDM, including
function templates and name pattern expansion.
This module is imported by Strata.DDM.AST and its types are re-exported there.
Most users should import Strata.DDM.AST rather than this module directly.
Function Template System #
Function templates specify patterns for generating auxiliary functions from datatype declarations. Each template has:
- An iteration scope (perConstructor or perField)
- A name pattern for generating function names
- Parameter and return type specifications
Function Template Types #
Iteration scope for function template expansion.
- perConstructor : FunctionIterScope
One function per constructor
- perField : FunctionIterScope
One function per field (across all constructors)
Instances For
Equations
- StrataDDM.instBEqFunctionIterScope.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
Equations
- StrataDDM.instBEqTypeRef.beq StrataDDM.TypeRef.datatype StrataDDM.TypeRef.datatype = true
- StrataDDM.instBEqTypeRef.beq StrataDDM.TypeRef.fieldType StrataDDM.TypeRef.fieldType = true
- StrataDDM.instBEqTypeRef.beq (StrataDDM.TypeRef.builtin a) (StrataDDM.TypeRef.builtin b) = (a == b)
- StrataDDM.instBEqTypeRef.beq x✝¹ x✝ = false
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
- StrataDDM.instReprTypeRef.repr StrataDDM.TypeRef.datatype prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "StrataDDM.TypeRef.datatype")).group prec✝
- StrataDDM.instReprTypeRef.repr StrataDDM.TypeRef.fieldType prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "StrataDDM.TypeRef.fieldType")).group prec✝
Instances For
Equations
- StrataDDM.instReprTypeRef = { reprPrec := StrataDDM.instReprTypeRef.repr }
Equations
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.datatype StrataDDM.TypeRef.datatype = isTrue ⋯
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.datatype StrataDDM.TypeRef.fieldType = isFalse StrataDDM.instDecidableEqTypeRef.decEq._proof_1✝
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.datatype (StrataDDM.TypeRef.builtin name) = isFalse ⋯
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.fieldType StrataDDM.TypeRef.datatype = isFalse StrataDDM.instDecidableEqTypeRef.decEq._proof_3✝
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.fieldType StrataDDM.TypeRef.fieldType = isTrue ⋯
- StrataDDM.instDecidableEqTypeRef.decEq StrataDDM.TypeRef.fieldType (StrataDDM.TypeRef.builtin name) = isFalse ⋯
- StrataDDM.instDecidableEqTypeRef.decEq (StrataDDM.TypeRef.builtin name) StrataDDM.TypeRef.datatype = isFalse ⋯
- StrataDDM.instDecidableEqTypeRef.decEq (StrataDDM.TypeRef.builtin name) StrataDDM.TypeRef.fieldType = isFalse ⋯
- StrataDDM.instDecidableEqTypeRef.decEq (StrataDDM.TypeRef.builtin a) (StrataDDM.TypeRef.builtin b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
Instances For
A part of a name pattern - either a literal string or a placeholder.
- literal
(s : String)
: NamePatternPart
A literal string to include verbatim in the generated name
- datatype : NamePatternPart
Placeholder for the datatype name
- constructor : NamePatternPart
Placeholder for the constructor name
- field : NamePatternPart
Placeholder for the field name
Instances For
Equations
- StrataDDM.instBEqNamePatternPart.beq (StrataDDM.NamePatternPart.literal a) (StrataDDM.NamePatternPart.literal b) = (a == b)
- StrataDDM.instBEqNamePatternPart.beq StrataDDM.NamePatternPart.datatype StrataDDM.NamePatternPart.datatype = true
- StrataDDM.instBEqNamePatternPart.beq StrataDDM.NamePatternPart.constructor StrataDDM.NamePatternPart.constructor = true
- StrataDDM.instBEqNamePatternPart.beq StrataDDM.NamePatternPart.field StrataDDM.NamePatternPart.field = true
- StrataDDM.instBEqNamePatternPart.beq x✝¹ x✝ = false
Instances For
Equations
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- StrataDDM.instDecidableEqNamePatternPart.decEq (StrataDDM.NamePatternPart.literal a) (StrataDDM.NamePatternPart.literal b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq (StrataDDM.NamePatternPart.literal s) StrataDDM.NamePatternPart.datatype = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq (StrataDDM.NamePatternPart.literal s) StrataDDM.NamePatternPart.constructor = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq (StrataDDM.NamePatternPart.literal s) StrataDDM.NamePatternPart.field = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.datatype (StrataDDM.NamePatternPart.literal s) = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.datatype StrataDDM.NamePatternPart.datatype = isTrue ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.datatype StrataDDM.NamePatternPart.constructor = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_7✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.datatype StrataDDM.NamePatternPart.field = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_8✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.constructor (StrataDDM.NamePatternPart.literal s) = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.constructor StrataDDM.NamePatternPart.datatype = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_10✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.constructor StrataDDM.NamePatternPart.constructor = isTrue ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.constructor StrataDDM.NamePatternPart.field = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_11✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.field (StrataDDM.NamePatternPart.literal s) = isFalse ⋯
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.field StrataDDM.NamePatternPart.datatype = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_13✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.field StrataDDM.NamePatternPart.constructor = isFalse StrataDDM.instDecidableEqNamePatternPart.decEq._proof_14✝
- StrataDDM.instDecidableEqNamePatternPart.decEq StrataDDM.NamePatternPart.field StrataDDM.NamePatternPart.field = isTrue ⋯
Instances For
Equations
A function template specification. Describes how to generate additional functions based on datatype structure.
- scope : FunctionIterScope
Iteration scope
- namePattern : Array NamePatternPart
Name pattern as structured parts
Parameter types (list of type references)
- returnType : TypeRef
Return type reference
Instances For
Equations
- One or more equations did not get rendered due to their size.
- StrataDDM.instBEqFunctionTemplate.beq x✝¹ x✝ = false
Instances For
Equations
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Equations
Name Pattern Functions #
Expand a name pattern with concrete values. Each part is expanded based on its type:
literal s→ the literal string sdatatype→ the datatype nameconstructor→ the constructor name (or empty string if not provided)field→ the field name (or empty string if not provided)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Validate a name pattern for scope compatibility.
Returns none if valid, or some errorMessage if invalid.
perConstructorscope cannot use.fieldplaceholderperFieldscope cannot use.constructorplaceholder
Equations
- One or more equations did not get rendered due to their size.