Module Notation_term
type notation_constr
=
type scope_name
= string
type tmp_scope_name
= scope_name
type subscopes
= tmp_scope_name option * scope_name list
type extended_subscopes
= Constrexpr.notation_entry_level * subscopes
type constr_as_binder_kind
=
|
AsIdent
|
AsName
|
AsNameOrPattern
|
AsStrictPattern
type notation_binder_source
=
|
NtnParsedAsPattern of bool
|
NtnParsedAsIdent
|
NtnParsedAsName
|
NtnBinderParsedAsConstr of constr_as_binder_kind
|
NtnParsedAsBinder
type notation_var_instance_type
=
|
NtnTypeConstr
|
NtnTypeBinder of notation_binder_source
|
NtnTypeConstrList
|
NtnTypeBinderList
type notation_var_internalization_type
=
|
NtnInternTypeAny of scope_name option
|
NtnInternTypeOnlyBinder
Type of variables when interpreting a constr_expr as a notation_constr: in a recursive pattern x..y, both x and y carry the individual type of each element of the list x..y
type interpretation
= (Names.Id.t * (extended_subscopes * notation_var_instance_type)) list * notation_constr
This characterizes to what a notation is interpreted to
type reversibility_status
=
|
APrioriReversible
|
HasLtac
|
NonInjective of Names.Id.t list
type notation_interp_env
=
{
ninterp_var_type : notation_var_internalization_type Names.Id.Map.t;
ninterp_rec_vars : Names.Id.t Names.Id.Map.t;
}
type interp_rule
=
|
NotationRule of Constrexpr.specific_notation
|
AbbrevRule of Names.KerName.t