Module Extraction_plugin.Miniml

type kill_reason =
| Ktype
| Kprop
| Kimplicit of Names.GlobRef.t * int
type sign =
| Keep
| Kill of kill_reason
type signature = sign list
type ml_type =
| Tarr of ml_type * ml_type
| Tglob of Names.GlobRef.t * ml_type list
| Tvar of int
| Tvar' of int
| Tmeta of ml_meta
| Tdummy of kill_reason
| Tunknown
| Taxiom
and ml_meta = {
id : int;
mutable contents : ml_type option;
}
type ml_schema = int * ml_type
type inductive_kind =
| Singleton
| Coinductive
| Standard
| Record of Names.GlobRef.t option list
type ml_ind_packet = {
ip_typename : Names.Id.t;
ip_consnames : Names.Id.t array;
ip_logical : bool;
ip_sign : signature;
ip_vars : Names.Id.t list;
ip_types : ml_type list array;
}
type equiv =
| NoEquiv
| Equiv of Names.KerName.t
| RenEquiv of string
type ml_ind = {
ind_kind : inductive_kind;
ind_nparams : int;
ind_packets : ml_ind_packet array;
ind_equiv : equiv;
}
type ml_ident =
| Dummy
| Id of Names.Id.t
| Tmp of Names.Id.t
type ml_branch = ml_ident list * ml_pattern * ml_ast
and ml_ast =
| MLrel of int
| MLapp of ml_ast * ml_ast list
| MLlam of ml_ident * ml_ast
| MLletin of ml_ident * ml_ast * ml_ast
| MLglob of Names.GlobRef.t
| MLcons of ml_type * Names.GlobRef.t * ml_ast list
| MLtuple of ml_ast list
| MLcase of ml_type * ml_ast * ml_branch array
| MLfix of int * Names.Id.t array * ml_ast array
| MLexn of string
| MLdummy of kill_reason
| MLaxiom
| MLmagic of ml_ast
| MLuint of Uint63.t
and ml_pattern =
| Pcons of Names.GlobRef.t * ml_pattern list
| Ptuple of ml_pattern list
| Prel of int

Cf. the idents in the branch. Prel 1 is the last one.

| Pwild
| Pusual of Names.GlobRef.t

Shortcut for Pcons (r,Prel n;...;Prel 1) *

type ml_decl =
| Dind of Names.MutInd.t * ml_ind
| Dtype of Names.GlobRef.t * Names.Id.t list * ml_type
| Dterm of Names.GlobRef.t * ml_ast * ml_type
| Dfix of Names.GlobRef.t array * ml_ast array * ml_type array
type ml_spec =
| Sind of Names.MutInd.t * ml_ind
| Stype of Names.GlobRef.t * Names.Id.t list * ml_type option
| Sval of Names.GlobRef.t * ml_type
type ml_specif =
| Spec of ml_spec
| Smodule of ml_module_type
| Smodtype of ml_module_type
and ml_module_type =
| MTident of Names.ModPath.t
| MTfunsig of Names.MBId.t * ml_module_type * ml_module_type
| MTsig of Names.ModPath.t * ml_module_sig
| MTwith of ml_module_type * ml_with_declaration
and ml_with_declaration =
| ML_With_type of Names.Id.t list * Names.Id.t list * ml_type
| ML_With_module of Names.Id.t list * Names.ModPath.t
and ml_module_sig = (Names.Label.t * ml_specif) list
type ml_structure_elem =
| SEdecl of ml_decl
| SEmodule of ml_module
| SEmodtype of ml_module_type
and ml_module_expr =
| MEident of Names.ModPath.t
| MEfunctor of Names.MBId.t * ml_module_type * ml_module_expr
| MEstruct of Names.ModPath.t * ml_module_structure
| MEapply of ml_module_expr * ml_module_expr
and ml_module_structure = (Names.Label.t * ml_structure_elem) list
and ml_module = {
ml_mod_expr : ml_module_expr;
ml_mod_type : ml_module_type;
}
type ml_structure = (Names.ModPath.t * ml_module_structure) list
type ml_signature = (Names.ModPath.t * ml_module_sig) list
type unsafe_needs = {
mldummy : bool;
tdummy : bool;
tunknown : bool;
magic : bool;
}
type language_descr = {
keywords : Names.Id.Set.t;
file_suffix : string;
file_naming : Names.ModPath.t -> string;
preamble : Names.Id.t -> Pp.t option -> Names.ModPath.t list -> unsafe_needs -> Pp.t;
pp_struct : ml_structure -> Pp.t;
sig_suffix : string option;
sig_preamble : Names.Id.t -> Pp.t option -> Names.ModPath.t list -> unsafe_needs -> Pp.t;
pp_sig : ml_signature -> Pp.t;
pp_decl : ml_decl -> Pp.t;
}