sig
type tag_update_info = SurfaceSyntax.tag_update_info
type field = SurfaceSyntax.field
type pattern =
PVar of Variable.name * TypeCore.location
| PTuple of Expressions.pattern list
| PConstruct of TypeCore.resolved_datacon *
(TypeCore.Field.name * Expressions.pattern) list
| POpen of TypeCore.var
| PAs of Expressions.pattern * Expressions.pattern
| PAny
type rec_flag = SurfaceSyntax.rec_flag = Nonrecursive | Recursive
type expression =
EConstraint of Expressions.expression * TypeCore.typ
| EVar of TypeCore.db_index
| EOpen of TypeCore.var
| EBuiltin of string
| ELet of Expressions.rec_flag * Expressions.patexpr list *
Expressions.expression
| EFun of (TypeCore.type_binding * TypeCore.flavor) list * TypeCore.typ *
TypeCore.typ * Expressions.expression
| EAssign of Expressions.expression * Expressions.field *
Expressions.expression
| EAssignTag of Expressions.expression * TypeCore.resolved_datacon *
Expressions.tag_update_info
| EAccess of Expressions.expression * Expressions.field
| EApply of Expressions.expression * Expressions.expression
| ETApply of Expressions.expression * Expressions.tapp * Kind.kind
| EMatch of bool * Expressions.expression * Expressions.patexpr list
| ETuple of Expressions.expression list
| EConstruct of TypeCore.resolved_datacon *
(TypeCore.Field.name * Expressions.expression) list
| EIfThenElse of bool * Expressions.expression * Expressions.expression *
Expressions.expression
| ELocated of Expressions.expression * TypeCore.location
| EInt of int
| EExplained of Expressions.expression
| EGive of Expressions.expression * Expressions.expression
| ETake of Expressions.expression * Expressions.expression
| EOwns of Expressions.expression * Expressions.expression
| EFail
and tapp = Ordered of TypeCore.typ | Named of Variable.name * TypeCore.typ
and patexpr = Expressions.pattern * Expressions.expression
type declaration =
DMultiple of Expressions.rec_flag * Expressions.patexpr list
| DLocated of Expressions.declaration * TypeCore.location
type declaration_group = Expressions.declaration list
type sig_item = Variable.name * TypeCore.typ
type toplevel_item =
DataTypeGroup of TypeCore.data_type_group
| ValueDeclarations of Expressions.declaration_group
| PermDeclaration of Expressions.sig_item
type implementation = Expressions.toplevel_item list
type interface = Expressions.toplevel_item list
val e_unit : Expressions.expression
val p_unit : Expressions.pattern
val eunloc : Expressions.expression -> Expressions.expression
val tsubst_toplevel_items :
TypeCore.typ ->
TypeCore.db_index ->
Expressions.toplevel_item list -> Expressions.toplevel_item list
val tpsubst_expr :
TypeCore.env ->
TypeCore.typ ->
TypeCore.var -> Expressions.expression -> Expressions.expression
val esubst_toplevel_items :
Expressions.expression ->
TypeCore.db_index ->
Expressions.toplevel_item list -> Expressions.toplevel_item list
val epsubst :
TypeCore.env ->
Expressions.expression ->
TypeCore.var -> Expressions.expression -> Expressions.expression
type substitution_kit = {
subst_type : TypeCore.typ -> TypeCore.typ;
subst_expr : Expressions.expression -> Expressions.expression;
subst_decl : Expressions.declaration list -> Expressions.declaration list;
subst_pat : Expressions.pattern list -> Expressions.pattern list;
vars : TypeCore.var list;
}
val bind_evars :
TypeCore.env ->
TypeCore.type_binding list -> TypeCore.env * Expressions.substitution_kit
val bind_vars :
TypeCore.env ->
SurfaceSyntax.type_binding list ->
TypeCore.env * Expressions.substitution_kit
val bind_patexprs :
TypeCore.env ->
Expressions.rec_flag ->
(Expressions.pattern * Expressions.expression) list ->
TypeCore.env * (Expressions.pattern * Expressions.expression) list *
Expressions.substitution_kit
module ExprPrinter :
sig
val print_maybe_qualified_datacon :
Datacon.name SurfaceSyntax.maybe_qualified -> MzPprint.document
val pmaybe_qualified_datacon :
Buffer.t -> Datacon.name SurfaceSyntax.maybe_qualified -> unit
val print_datacon_reference :
SurfaceSyntax.datacon_reference -> MzPprint.document
val print_patexpr :
TypeCore.env ->
Expressions.pattern * Expressions.expression -> MzPprint.document
val print_patexprs :
TypeCore.env ->
(Expressions.pattern * Expressions.expression) list ->
MzPprint.document
val print_pat :
TypeCore.env -> Expressions.pattern -> MzPprint.document
val print_tapp : TypeCore.env -> Expressions.tapp -> MzPprint.document
val print_expr :
TypeCore.env -> Expressions.expression -> MzPprint.document
val print_rec_flag : Expressions.rec_flag -> MzPprint.document
val print_ebinder :
TypeCore.env ->
TypeCore.type_binding * TypeCore.flavor -> MzPprint.document
val print_binder :
TypeCore.env ->
(Variable.name * Kind.kind * TypeCore.location) * TypeCore.flavor ->
MzPprint.document
val print_declaration :
TypeCore.env ->
Expressions.declaration ->
TypeCore.env * MzPprint.document *
(Expressions.declaration list -> Expressions.declaration list)
val print_declarations :
TypeCore.env -> Expressions.declaration list -> MzPprint.document
val print_sig_item :
TypeCore.env -> Variable.name * TypeCore.typ -> MzPprint.document
val psigitem :
Buffer.t -> TypeCore.env * (Variable.name * TypeCore.typ) -> unit
val pdeclarations :
Buffer.t -> TypeCore.env * Expressions.declaration list -> unit
val pexpr : Buffer.t -> TypeCore.env * Expressions.expression -> unit
val ppat : Buffer.t -> TypeCore.env * Expressions.pattern -> unit
end
end