sig
type program = MiniAst.binding list
and binding =
BindValue of Positions.position * MiniAst.value_definition list
| BindRecValue of Positions.position * MiniAst.value_definition list
| TypeDec of Positions.position * MiniAst.type_declaration list
and expression =
EVar of Positions.position * MiniAst.name
| ELambda of Positions.position * MiniAst.pattern * MiniAst.expression
| EApp of Positions.position * MiniAst.expression * MiniAst.expression
| EBinding of Positions.position * MiniAst.binding * MiniAst.expression
| EPrimApp of Positions.position * MiniAst.primitive *
MiniAst.expression list
| EForall of Positions.position * MiniAst.tname list * MiniAst.expression
| EExists of Positions.position * MiniAst.tname list * MiniAst.expression
| ETypeConstraint of Positions.position * MiniAst.expression *
MiniAst.typ
| EDCon of Positions.position * MiniAst.dname * MiniAst.expression list
| EMatch of Positions.position * MiniAst.expression * MiniAst.clause list
| ERecordEmpty of Positions.position
| ERecordAccess of Positions.position * MiniAst.expression *
MiniAst.lname
| ERecordExtend of Positions.position * MiniAst.record_binding list *
MiniAst.expression
| ERecordUpdate of Positions.position * MiniAst.expression *
MiniAst.lname * MiniAst.expression
| EAssertFalse of Positions.position
and name = Constraint.sname = SName of string
and tname = MultiEquation.tname
and dname = DName of string
and lname = CoreAlgebra.lname
and primitive = PIntegerConstant of int | PCharConstant of char | PUnit
and clause = Positions.position * MiniAst.pattern * MiniAst.expression
and record_binding = MiniAst.lname * MiniAst.expression
and type_declaration =
Positions.position * MiniAst.kind * MiniAst.tname *
MiniAst.type_definition
and type_definition =
DAlgebraic of
(Positions.position * MiniAst.dname * MiniAst.tname list *
MiniAst.typ)
list
and value_definition =
Positions.position * MiniAst.tname list * MiniAst.pattern *
MiniAst.expression
and pattern =
PVar of Positions.position * MiniAst.name
| PWildcard of Positions.position
| PAlias of Positions.position * MiniAst.name * MiniAst.pattern
| PTypeConstraint of Positions.position * MiniAst.pattern * MiniAst.typ
| PPrimitive of Positions.position * MiniAst.primitive
| PData of Positions.position * MiniAst.dname * MiniAst.pattern list
| PAnd of Positions.position * MiniAst.pattern list
| POr of Positions.position * MiniAst.pattern list
and kind =
KStar
| KTimes of MiniAst.kind * MiniAst.kind
| KArrow of MiniAst.kind * MiniAst.kind
| KEmptyRow
and typ =
TypVar of Positions.position * MiniAst.tname
| TypApp of Positions.position * MiniAst.typ * MiniAst.typ list
| TypRowCons of Positions.position * (MiniAst.lname * MiniAst.typ) list *
MiniAst.typ
| TypRowUniform of Positions.position * MiniAst.typ
end