Ast_500.ParsetreeSourceinclude module type of struct include Ast_414.Parsetree endtype constant = Ast_414.Parsetree.constant = | Pconst_integer of string * char optionInteger constants such as 3 3l 3L 3n.
Suffixes [g-z][G-Z] are accepted by the parser. Suffixes except 'l', 'L' and 'n' are rejected by the typechecker
| Pconst_char of charCharacter such as 'c'.
| Pconst_string of string * Location.t * string optionConstant string such as "constant" or {delim|other constant|delim}.
The location span the content of the string, without the delimiters.
*)| Pconst_float of string * char optionFloat constant such as 3.4, 2e5 or 1.4e-4.
Suffixes g-zG-Z are accepted by the parser. Suffixes are rejected by the typechecker.
type attribute = Ast_414.Parsetree.attribute = {attr_name : string Ast_414.Asttypes.loc;attr_payload : payload;attr_loc : Location.t;}Attributes such as [\@id ARG] and [\@\@id ARG].
Metadata containers passed around within the AST. The compiler ignores unknown attributes.
Extension points such as [%id ARG] and [%%id ARG].
Sub-language placeholder -- rejected by the typechecker.
and payload = Ast_414.Parsetree.payload = | PStr of structure| PSig of signature: SIG in an attribute or an extension point
| PTyp of core_type: T in an attribute or an extension point
| PPat of pattern * expression option? P or ? P when E, in an attribute or an extension point
and core_type = Ast_414.Parsetree.core_type = {ptyp_desc : core_type_desc;ptyp_loc : Location.t;ptyp_loc_stack : location_stack;ptyp_attributes : attributes;... [\@id1] [\@id2]
}and core_type_desc = Ast_414.Parsetree.core_type_desc = | Ptyp_any_
| Ptyp_var of stringA type variable such as 'a
| Ptyp_arrow of Ast_414.Asttypes.arg_label * core_type * core_type| Ptyp_tuple of core_type listPtyp_tuple([T1 ; ... ; Tn]) represents a product type T1 * ... * Tn.
Invariant: n >= 2.
| Ptyp_constr of Longident.t Ast_414.Asttypes.loc * core_type listPtyp_constr(lident, l) represents:
tconstr when l=[],T tconstr when l=[T],(T1, ..., Tn) tconstr when l=[T1 ; ... ; Tn].| Ptyp_object of object_field list * Ast_414.Asttypes.closed_flag| Ptyp_class of Longident.t Ast_414.Asttypes.loc * core_type listPtyp_class(tconstr, l) represents:
#tconstr when l=[],T #tconstr when l=[T],(T1, ..., Tn) #tconstr when l=[T1 ; ... ; Tn].| Ptyp_alias of core_type * stringT as 'a.
| Ptyp_variant of row_field list
* Ast_414.Asttypes.closed_flag
* Ast_414.Asttypes.label list option| Ptyp_poly of string Ast_414.Asttypes.loc list * core_type'a1 ... 'an. T
Can only appear in the following context:
core_type of a Ppat_constraint node corresponding to a constraint on a let-binding:let x : 'a1 ... 'an. T = e ...Cfk_virtual for methods (not values).core_type of a Pctf_method node.pld_type field of a label_declaration.core_type of a Ptyp_object node.pval_type field of a value_description.| Ptyp_package of package_type(module S).
| Ptyp_extension of extension[%id].
and package_type =
Longident.t Ast_414.Asttypes.loc
* (Longident.t Ast_414.Asttypes.loc * core_type) listAs package_type typed values:
(S, []) represents (module S),(S, [(t1, T1) ; ... ; (tn, Tn)]) represents (module S with type t1 = T1 and ... and tn = Tn).and row_field = Ast_414.Parsetree.row_field = {prf_desc : row_field_desc;prf_loc : Location.t;prf_attributes : attributes;}and row_field_desc = Ast_414.Parsetree.row_field_desc = | Rtag of Ast_414.Asttypes.label Ast_414.Asttypes.loc * bool * core_type listRtag(`A, b, l) represents:
`A when b is true and l is [],`A of T when b is false and l is [T],`A of T1 & .. & Tn when b is false and l is [T1;...Tn],`A of & T1 & .. & Tn when b is true and l is [T1;...Tn].bool field is true if the tag contains a constant (empty) constructor.& occurs when several types are used for the same constructor (see 4.2 in the manual)| Rinherit of core_type[ | t ]
and object_field = Ast_414.Parsetree.object_field = {pof_desc : object_field_desc;pof_loc : Location.t;pof_attributes : attributes;}and object_field_desc = Ast_414.Parsetree.object_field_desc = | Otag of Ast_414.Asttypes.label Ast_414.Asttypes.loc * core_type| Oinherit of core_typeand pattern = Ast_414.Parsetree.pattern = {ppat_desc : pattern_desc;ppat_loc : Location.t;ppat_loc_stack : location_stack;ppat_attributes : attributes;... [\@id1] [\@id2]
}and pattern_desc = Ast_414.Parsetree.pattern_desc = | Ppat_anyThe pattern _.
| Ppat_var of string Ast_414.Asttypes.locA variable pattern such as x
| Ppat_alias of pattern * string Ast_414.Asttypes.locAn alias pattern such as P as 'a
| Ppat_constant of constantPatterns such as 1, 'a', "true", 1.0, 1l, 1L, 1n
| Ppat_interval of constant * constantPatterns such as 'a'..'z'.
Other forms of interval are recognized by the parser but rejected by the type-checker.
*)| Ppat_tuple of pattern listPatterns (P1, ..., Pn).
Invariant: n >= 2
| Ppat_construct of Longident.t Ast_414.Asttypes.loc
* (string Ast_414.Asttypes.loc list * pattern) optionPpat_construct(C, args) represents:
C when args is None,C P when args is Some ([], P)C (P1, ..., Pn) when args is Some ([], Ppat_tuple [P1; ...; Pn])C (type a b) P when args is Some ([a; b], P)| Ppat_variant of Ast_414.Asttypes.label * pattern optionPpat_variant(`A, pat) represents:
`A when pat is None,`A P when pat is Some P| Ppat_record of (Longident.t Ast_414.Asttypes.loc * pattern) list
* Ast_414.Asttypes.closed_flag| Ppat_array of pattern listPattern [| P1; ...; Pn |]
| Ppat_or of pattern * patternPattern P1 | P2
| Ppat_constraint of pattern * core_typePattern (P : T)
| Ppat_type of Longident.t Ast_414.Asttypes.locPattern #tconst
| Ppat_lazy of patternPattern lazy P
| Ppat_unpack of string option Ast_414.Asttypes.locPpat_unpack(s) represents:
(module P) when s is Some "P"(module _) when s is NoneNote: (module P : S) is represented as Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)
| Ppat_exception of patternPattern exception P
| Ppat_extension of extensionPattern [%id]
| Ppat_open of Longident.t Ast_414.Asttypes.loc * patternPattern M.(P)
and expression = Ast_414.Parsetree.expression = {pexp_desc : expression_desc;pexp_loc : Location.t;pexp_loc_stack : location_stack;pexp_attributes : attributes;... [\@id1] [\@id2]
}and expression_desc = Ast_414.Parsetree.expression_desc = | Pexp_ident of Longident.t Ast_414.Asttypes.locIdentifiers such as x and M.x
| Pexp_constant of constantExpressions constant such as 1, 'a', "true", 1.0, 1l, 1L, 1n
| Pexp_let of Ast_414.Asttypes.rec_flag * value_binding list * expressionPexp_let(flag, [(P1,E1) ; ... ; (Pn,En)], E) represents:
let P1 = E1 and ... and Pn = EN in E when flag is Nonrecursive,let rec P1 = E1 and ... and Pn = EN in E when flag is Recursive.| Pexp_function of case listfunction P1 -> E1 | ... | Pn -> En
| Pexp_fun of Ast_414.Asttypes.arg_label
* expression option
* pattern
* expressionPexp_fun(lbl, exp0, P, E1) represents:
fun P -> E1 when lbl is Nolabel and exp0 is Nonefun ~l:P -> E1 when lbl is Labelled l and exp0 is Nonefun ?l:P -> E1 when lbl is Optional l and exp0 is Nonefun ?l:(P = E0) -> E1 when lbl is Optional l and exp0 is Some E0Notes:
E0 is provided, only Optional is allowed.fun P1 P2 .. Pn -> E1 is represented as nested Pexp_fun.let f P = E is represented using Pexp_fun.| Pexp_apply of expression * (Ast_414.Asttypes.arg_label * expression) list| Pexp_match of expression * case listmatch E0 with P1 -> E1 | ... | Pn -> En
| Pexp_try of expression * case listtry E0 with P1 -> E1 | ... | Pn -> En
| Pexp_tuple of expression listExpressions (E1, ..., En)
Invariant: n >= 2
| Pexp_construct of Longident.t Ast_414.Asttypes.loc * expression optionPexp_construct(C, exp) represents:
C when exp is None,C E when exp is Some E,C (E1, ..., En) when exp is Some (Pexp_tuple[E1;...;En])| Pexp_variant of Ast_414.Asttypes.label * expression optionPexp_variant(`A, exp) represents
`A when exp is None`A E when exp is Some E| Pexp_record of (Longident.t Ast_414.Asttypes.loc * expression) list
* expression optionPexp_record([(l1,P1) ; ... ; (ln,Pn)], exp0) represents
{ l1=P1; ...; ln=Pn } when exp0 is None{ E0 with l1=P1; ...; ln=Pn } when exp0 is Some E0Invariant: n > 0
| Pexp_field of expression * Longident.t Ast_414.Asttypes.locE.l
| Pexp_setfield of expression * Longident.t Ast_414.Asttypes.loc * expressionE1.l <- E2
| Pexp_array of expression list[| E1; ...; En |]
| Pexp_ifthenelse of expression * expression * expression optionif E1 then E2 else E3
| Pexp_sequence of expression * expressionE1; E2
| Pexp_while of expression * expressionwhile E1 do E2 done
| Pexp_for of pattern
* expression
* expression
* Ast_414.Asttypes.direction_flag
* expression| Pexp_constraint of expression * core_type(E : T)
| Pexp_coerce of expression * core_type option * core_typePexp_coerce(E, from, T) represents
(E :> T) when from is None,(E : T0 :> T) when from is Some T0.| Pexp_send of expression * Ast_414.Asttypes.label Ast_414.Asttypes.locE # m
| Pexp_new of Longident.t Ast_414.Asttypes.locnew M.c
| Pexp_setinstvar of Ast_414.Asttypes.label Ast_414.Asttypes.loc * expressionx <- 2
| Pexp_override of (Ast_414.Asttypes.label Ast_414.Asttypes.loc * expression)
list{< x1 = E1; ...; xn = En >}
| Pexp_letmodule of string option Ast_414.Asttypes.loc * module_expr * expressionlet module M = ME in E
| Pexp_letexception of extension_constructor * expressionlet exception C in E
| Pexp_assert of expressionassert E.
Note: assert false is treated in a special way by the type-checker.
| Pexp_lazy of expressionlazy E
| Pexp_poly of expression * core_type optionUsed for method bodies.
Can only be used as the expression under Cfk_concrete for methods (not values).
| Pexp_object of class_structureobject ... end
| Pexp_newtype of string Ast_414.Asttypes.loc * expressionfun (type t) -> E
| Pexp_pack of module_expr(module ME).
(module ME : S) is represented as Pexp_constraint(Pexp_pack ME, Ptyp_package S)
| Pexp_open of open_declaration * expressionM.(E)let open M in Elet open! M in E| Pexp_letop of letoplet* P = E0 in E1let* P0 = E00 and* P1 = E01 in E1| Pexp_extension of extension[%id]
| Pexp_unreachable.
and case = Ast_414.Parsetree.case = {pc_lhs : pattern;pc_guard : expression option;pc_rhs : expression;}Values of type case represents (P -> E) or (P when E0 -> E)
and letop = Ast_414.Parsetree.letop = {let_ : binding_op;ands : binding_op list;body : expression;}and binding_op = Ast_414.Parsetree.binding_op = {pbop_op : string Ast_414.Asttypes.loc;pbop_pat : pattern;pbop_exp : expression;pbop_loc : Location.t;}and value_description = Ast_414.Parsetree.value_description = {pval_name : string Ast_414.Asttypes.loc;pval_type : core_type;pval_prim : string list;pval_attributes : attributes;... [\@\@id1] [\@\@id2]
pval_loc : Location.t;}Values of type value_description represents:
and type_declaration = Ast_414.Parsetree.type_declaration = {ptype_name : string Ast_414.Asttypes.loc;ptype_params : (core_type
* (Ast_414.Asttypes.variance * Ast_414.Asttypes.injectivity))
list;('a1,...'an) t
ptype_cstrs : (core_type * core_type * Location.t) list;... constraint T1=T1' ... constraint Tn=Tn'
ptype_kind : type_kind;ptype_private : Ast_414.Asttypes.private_flag;for = private ...
ptype_manifest : core_type option;represents = T
ptype_attributes : attributes;... [\@\@id1] [\@\@id2]
ptype_loc : Location.t;}Here are type declarations and their representation, for various ptype_kind and ptype_manifest values:
type t when type_kind is Ptype_abstract, and manifest is None,type t = T0 when type_kind is Ptype_abstract, and manifest is Some T0,type t = C of T | ... when type_kind is Ptype_variant, and manifest is None,type t = T0 = C of T | ... when type_kind is Ptype_variant, and manifest is Some T0,type t = {l: T; ...} when type_kind is Ptype_record, and manifest is None,type t = T0 = {l : T; ...} when type_kind is Ptype_record, and manifest is Some T0,type t = .. when type_kind is Ptype_open, and manifest is None.and type_kind = Ast_414.Parsetree.type_kind = | Ptype_abstract| Ptype_variant of constructor_declaration list| Ptype_record of label_declaration listInvariant: non-empty list
*)| Ptype_openand label_declaration = Ast_414.Parsetree.label_declaration = {pld_name : string Ast_414.Asttypes.loc;pld_mutable : Ast_414.Asttypes.mutable_flag;pld_type : core_type;pld_loc : Location.t;pld_attributes : attributes;l : T [\@id1] [\@id2]
}{ ...; l: T; ... } when pld_mutable is Immutable,{ ...; mutable l: T; ... } when pld_mutable is Mutable.Note: T can be a Ptyp_poly.
and constructor_declaration = Ast_414.Parsetree.constructor_declaration = {pcd_name : string Ast_414.Asttypes.loc;pcd_vars : string Ast_414.Asttypes.loc list;pcd_args : constructor_arguments;pcd_res : core_type option;pcd_loc : Location.t;pcd_attributes : attributes;C of ... [\@id1] [\@id2]
}and constructor_arguments = Ast_414.Parsetree.constructor_arguments = | Pcstr_tuple of core_type list| Pcstr_record of label_declaration listValues of type constructor_declaration represents the constructor arguments of:
C of T1 * ... * Tn when res = None, and args = Pcstr_tuple [T1; ... ; Tn],C: T0 when res = Some T0, and args = Pcstr_tuple [],C: T1 * ... * Tn -> T0 when res = Some T0, and args = Pcstr_tuple [T1; ... ; Tn],C of {...} when res = None, and args = Pcstr_record [...],C: {...} -> T0 when res = Some T0, and args = Pcstr_record [...].and type_extension = Ast_414.Parsetree.type_extension = {ptyext_path : Longident.t Ast_414.Asttypes.loc;ptyext_params : (core_type
* (Ast_414.Asttypes.variance * Ast_414.Asttypes.injectivity))
list;ptyext_constructors : extension_constructor list;ptyext_private : Ast_414.Asttypes.private_flag;ptyext_loc : Location.t;ptyext_attributes : attributes;... \@\@id1 \@\@id2
}Definition of new extensions constructors for the extensive sum type t (type t += ...).
and extension_constructor = Ast_414.Parsetree.extension_constructor = {pext_name : string Ast_414.Asttypes.loc;pext_kind : extension_constructor_kind;pext_loc : Location.t;pext_attributes : attributes;C of ... [\@id1] [\@id2]
}and type_exception = Ast_414.Parsetree.type_exception = {ptyexn_constructor : extension_constructor;ptyexn_loc : Location.t;ptyexn_attributes : attributes;... [\@\@id1] [\@\@id2]
}Definition of a new exception (exception E).
and extension_constructor_kind = Ast_414.Parsetree.extension_constructor_kind = | Pext_decl of string Ast_414.Asttypes.loc list
* constructor_arguments
* core_type optionPext_decl(existentials, c_args, t_opt) describes a new extension constructor. It can be:
C of T1 * ... * Tn when:
existentials is [],c_args is [T1; ...; Tn],t_opt is None.C: T0 when
existentials is [],c_args is [],t_opt is Some T0.C: T1 * ... * Tn -> T0 when
existentials is [],c_args is [T1; ...; Tn],t_opt is Some T0.C: 'a... . T1 * ... * Tn -> T0 when
existentials is ['a;...],c_args is [T1; ... ; Tn],t_opt is Some T0.| Pext_rebind of Longident.t Ast_414.Asttypes.locPext_rebind(D) re-export the constructor D with the new name C
and class_type = Ast_414.Parsetree.class_type = {pcty_desc : class_type_desc;pcty_loc : Location.t;pcty_attributes : attributes;... [\@id1] [\@id2]
}and class_type_desc = Ast_414.Parsetree.class_type_desc = | Pcty_constr of Longident.t Ast_414.Asttypes.loc * core_type listc['a1, ..., 'an] c| Pcty_signature of class_signatureobject ... end
| Pcty_arrow of Ast_414.Asttypes.arg_label * core_type * class_typePcty_arrow(lbl, T, CT) represents:
T -> CT when lbl is Nolabel,~l:T -> CT when lbl is Labelled l,?l:T -> CT when lbl is Optional l.| Pcty_extension of extension%id
| Pcty_open of open_description * class_typelet open M in CT
and class_signature = Ast_414.Parsetree.class_signature = {pcsig_self : core_type;pcsig_fields : class_type_field list;}Values of type class_signature represents:
object('selfpat) ... endobject ... end when pcsig_self is Ptyp_anyand class_type_field = Ast_414.Parsetree.class_type_field = {pctf_desc : class_type_field_desc;pctf_loc : Location.t;pctf_attributes : attributes;... [\@\@id1] [\@\@id2]
}and class_type_field_desc = Ast_414.Parsetree.class_type_field_desc = | Pctf_inherit of class_typeinherit CT
| Pctf_val of Ast_414.Asttypes.label Ast_414.Asttypes.loc
* Ast_414.Asttypes.mutable_flag
* Ast_414.Asttypes.virtual_flag
* core_typeval x: T
| Pctf_method of Ast_414.Asttypes.label Ast_414.Asttypes.loc
* Ast_414.Asttypes.private_flag
* Ast_414.Asttypes.virtual_flag
* core_type| Pctf_constraint of core_type * core_typeconstraint T1 = T2
| Pctf_attribute of attribute[\@\@\@id]
| Pctf_extension of extension[%%id]
and 'a class_infos = 'a Ast_414.Parsetree.class_infos = {pci_virt : Ast_414.Asttypes.virtual_flag;pci_params : (core_type
* (Ast_414.Asttypes.variance * Ast_414.Asttypes.injectivity))
list;pci_name : string Ast_414.Asttypes.loc;pci_expr : 'a;pci_loc : Location.t;pci_attributes : attributes;... [\@\@id1] [\@\@id2]
}Values of type class_expr class_infos represents:
class c = ...class ['a1,...,'an] c = ...class virtual c = ...They are also used for "class type" declaration.
and class_expr = Ast_414.Parsetree.class_expr = {pcl_desc : class_expr_desc;pcl_loc : Location.t;pcl_attributes : attributes;... [\@id1] [\@id2]
}and class_expr_desc = Ast_414.Parsetree.class_expr_desc = | Pcl_constr of Longident.t Ast_414.Asttypes.loc * core_type listc and ['a1, ..., 'an] c
| Pcl_structure of class_structureobject ... end
| Pcl_fun of Ast_414.Asttypes.arg_label
* expression option
* pattern
* class_exprPcl_fun(lbl, exp0, P, CE) represents:
fun P -> CE when lbl is Nolabel and exp0 is None,fun ~l:P -> CE when lbl is Labelled l and exp0 is None,fun ?l:P -> CE when lbl is Optional l and exp0 is None,fun ?l:(P = E0) -> CE when lbl is Optional l and exp0 is Some E0.| Pcl_apply of class_expr * (Ast_414.Asttypes.arg_label * expression) listPcl_apply(CE, [(l1,E1) ; ... ; (ln,En)]) represents CE ~l1:E1 ... ~ln:En. li can be empty (non labeled argument) or start with ? (optional argument).
Invariant: n > 0
| Pcl_let of Ast_414.Asttypes.rec_flag * value_binding list * class_exprPcl_let(rec, [(P1, E1); ... ; (Pn, En)], CE) represents:
let P1 = E1 and ... and Pn = EN in CE when rec is Nonrecursive,let rec P1 = E1 and ... and Pn = EN in CE when rec is Recursive.| Pcl_constraint of class_expr * class_type(CE : CT)
| Pcl_extension of extension[%id]
| Pcl_open of open_description * class_exprlet open M in CE
and class_structure = Ast_414.Parsetree.class_structure = {pcstr_self : pattern;pcstr_fields : class_field list;}Values of type class_structure represents:
object(selfpat) ... endobject ... end when pcstr_self is Ppat_anyand class_field = Ast_414.Parsetree.class_field = {pcf_desc : class_field_desc;pcf_loc : Location.t;pcf_attributes : attributes;... [\@\@id1] [\@\@id2]
}and class_field_desc = Ast_414.Parsetree.class_field_desc = | Pcf_inherit of Ast_414.Asttypes.override_flag
* class_expr
* string Ast_414.Asttypes.loc option| Pcf_val of Ast_414.Asttypes.label Ast_414.Asttypes.loc
* Ast_414.Asttypes.mutable_flag
* class_field_kindPcf_val(x,flag, kind) represents:
val x = E when flag is Immutable and kind is Cfk_concrete(Fresh, E)val virtual x: T when flag is Immutable and kind is Cfk_virtual(T)val mutable x = E when flag is Mutable and kind is Cfk_concrete(Fresh, E)val mutable virtual x: T when flag is Mutable and kind is Cfk_virtual(T)| Pcf_method of Ast_414.Asttypes.label Ast_414.Asttypes.loc
* Ast_414.Asttypes.private_flag
* class_field_kind| Pcf_constraint of core_type * core_typeconstraint T1 = T2
| Pcf_initializer of expressioninitializer E
| Pcf_attribute of attribute[\@\@\@id]
| Pcf_extension of extension[%%id]
and class_field_kind = Ast_414.Parsetree.class_field_kind = | Cfk_virtual of core_type| Cfk_concrete of Ast_414.Asttypes.override_flag * expressionand module_type = Ast_414.Parsetree.module_type = {pmty_desc : module_type_desc;pmty_loc : Location.t;pmty_attributes : attributes;... [\@id1] [\@id2]
}and module_type_desc = Ast_414.Parsetree.module_type_desc = | Pmty_ident of Longident.t Ast_414.Asttypes.locPmty_ident(S) represents S
| Pmty_signature of signaturesig ... end
| Pmty_functor of functor_parameter * module_typefunctor(X : MT1) -> MT2
| Pmty_with of module_type * with_constraint listMT with ...
| Pmty_typeof of module_exprmodule type of ME
| Pmty_extension of extension[%id]
| Pmty_alias of Longident.t Ast_414.Asttypes.loc(module M)
and functor_parameter = Ast_414.Parsetree.functor_parameter = | Unit()
| Named of string option Ast_414.Asttypes.loc * module_typeNamed(name, MT) represents:
(X : MT) when name is Some X,(_ : MT) when name is Noneand signature_item = Ast_414.Parsetree.signature_item = {psig_desc : signature_item_desc;psig_loc : Location.t;}and signature_item_desc = Ast_414.Parsetree.signature_item_desc = | Psig_value of value_descriptionval x: Texternal x: T = "s1" ... "sn"| Psig_type of Ast_414.Asttypes.rec_flag * type_declaration listtype t1 = ... and ... and tn = ...
| Psig_typesubst of type_declaration listtype t1 := ... and ... and tn := ...
| Psig_typext of type_extensiontype t1 += ...
| Psig_exception of type_exceptionexception C of T
| Psig_module of module_declarationmodule X = M and module X : MT
| Psig_modsubst of module_substitutionmodule X := M
| Psig_recmodule of module_declaration listmodule rec X1 : MT1 and ... and Xn : MTn
| Psig_modtype of module_type_declarationmodule type S = MT and module type S
| Psig_modtypesubst of module_type_declarationmodule type S := ...
| Psig_open of open_descriptionopen X
| Psig_include of include_descriptioninclude MT
| Psig_class of class_description listclass c1 : ... and ... and cn : ...
| Psig_class_type of class_type_declaration listclass type ct1 = ... and ... and ctn = ...
| Psig_attribute of attribute[\@\@\@id]
| Psig_extension of extension * attributes[%%id]
and module_declaration = Ast_414.Parsetree.module_declaration = {pmd_name : string option Ast_414.Asttypes.loc;pmd_type : module_type;pmd_attributes : attributes;... [\@\@id1] [\@\@id2]
pmd_loc : Location.t;}Values of type module_declaration represents S : MT
and module_substitution = Ast_414.Parsetree.module_substitution = {pms_name : string Ast_414.Asttypes.loc;pms_manifest : Longident.t Ast_414.Asttypes.loc;pms_attributes : attributes;... [\@\@id1] [\@\@id2]
pms_loc : Location.t;}Values of type module_substitution represents S := M
and module_type_declaration = Ast_414.Parsetree.module_type_declaration = {pmtd_name : string Ast_414.Asttypes.loc;pmtd_type : module_type option;pmtd_attributes : attributes;... [\@\@id1] [\@\@id2]
pmtd_loc : Location.t;}Values of type module_type_declaration represents:
S = MT,S for abstract module type declaration, when pmtd_type is None.and 'a open_infos = 'a Ast_414.Parsetree.open_infos = {popen_expr : 'a;popen_override : Ast_414.Asttypes.override_flag;popen_loc : Location.t;popen_attributes : attributes;}Values of type 'a open_infos represents:
open! X when popen_override is Override (silences the "used identifier shadowing" warning)open X when popen_override is FreshValues of type open_description represents:
open M.Nopen M(N).OValues of type open_declaration represents:
open M.Nopen M(N).Oopen struct ... endand 'a include_infos = 'a Ast_414.Parsetree.include_infos = {pincl_mod : 'a;pincl_loc : Location.t;pincl_attributes : attributes;}Values of type include_description represents include MT
Values of type include_declaration represents include ME
and with_constraint = Ast_414.Parsetree.with_constraint = | Pwith_type of Longident.t Ast_414.Asttypes.loc * type_declarationwith type X.t = ...
Note: the last component of the longident must match the name of the type_declaration.
*)| Pwith_module of Longident.t Ast_414.Asttypes.loc
* Longident.t Ast_414.Asttypes.locwith module X.Y = Z
| Pwith_modtype of Longident.t Ast_414.Asttypes.loc * module_typewith module type X.Y = Z
| Pwith_modtypesubst of Longident.t Ast_414.Asttypes.loc * module_typewith module type X.Y := sig end
| Pwith_typesubst of Longident.t Ast_414.Asttypes.loc * type_declarationwith type X.t := ..., same format as [Pwith_type]
| Pwith_modsubst of Longident.t Ast_414.Asttypes.loc
* Longident.t Ast_414.Asttypes.locwith module X.Y := Z
and module_expr = Ast_414.Parsetree.module_expr = {pmod_desc : module_expr_desc;pmod_loc : Location.t;pmod_attributes : attributes;... [\@id1] [\@id2]
}and module_expr_desc = Ast_414.Parsetree.module_expr_desc = | Pmod_ident of Longident.t Ast_414.Asttypes.locX
| Pmod_structure of structurestruct ... end
| Pmod_functor of functor_parameter * module_exprfunctor(X : MT1) -> ME
| Pmod_apply of module_expr * module_exprME1(ME2)
| Pmod_constraint of module_expr * module_type(ME : MT)
| Pmod_unpack of expression(val E)
| Pmod_extension of extension[%id]
and structure_item = Ast_414.Parsetree.structure_item = {pstr_desc : structure_item_desc;pstr_loc : Location.t;}and structure_item_desc = Ast_414.Parsetree.structure_item_desc = | Pstr_eval of expression * attributesE
| Pstr_value of Ast_414.Asttypes.rec_flag * value_binding listPstr_value(rec, [(P1, E1 ; ... ; (Pn, En))]) represents:
let P1 = E1 and ... and Pn = EN when rec is Nonrecursive,let rec P1 = E1 and ... and Pn = EN when rec is Recursive.| Pstr_primitive of value_descriptionval x: Texternal x: T = "s1" ... "sn" | Pstr_type of Ast_414.Asttypes.rec_flag * type_declaration listtype t1 = ... and ... and tn = ...
| Pstr_typext of type_extensiontype t1 += ...
| Pstr_exception of type_exceptionexception C of Texception C = M.X| Pstr_module of module_bindingmodule X = ME
| Pstr_recmodule of module_binding listmodule rec X1 = ME1 and ... and Xn = MEn
| Pstr_modtype of module_type_declarationmodule type S = MT
| Pstr_open of open_declarationopen X
| Pstr_class of class_declaration listclass c1 = ... and ... and cn = ...
| Pstr_class_type of class_type_declaration listclass type ct1 = ... and ... and ctn = ...
| Pstr_include of include_declarationinclude ME
| Pstr_attribute of attribute[\@\@\@id]
| Pstr_extension of extension * attributes[%%id]
and value_binding = Ast_414.Parsetree.value_binding = {pvb_pat : pattern;pvb_expr : expression;pvb_attributes : attributes;pvb_loc : Location.t;}and module_binding = Ast_414.Parsetree.module_binding = {pmb_name : string option Ast_414.Asttypes.loc;pmb_expr : module_expr;pmb_attributes : attributes;pmb_loc : Location.t;}Values of type module_binding represents module X = ME
type toplevel_phrase = Ast_414.Parsetree.toplevel_phrase = | Ptop_def of structure| Ptop_dir of toplevel_directive#use, #load ...
and toplevel_directive = Ast_414.Parsetree.toplevel_directive = {pdir_name : string Ast_414.Asttypes.loc;pdir_arg : directive_argument option;pdir_loc : Location.t;}and directive_argument = Ast_414.Parsetree.directive_argument = {pdira_desc : directive_argument_desc;pdira_loc : Location.t;}and directive_argument_desc = Ast_414.Parsetree.directive_argument_desc = | Pdir_string of string| Pdir_int of string * char option| Pdir_ident of Longident.t| Pdir_bool of bool