TypedtreeAbstract syntax tree after typing
By comparison with Parsetree:
Longindent.t is accompanied by a resolved Path.t.type attribute = Parsetree.attributetype attributes = attribute listtype _ pattern_category = | Value : value pattern_category | 
| Computation : computation pattern_category | 
type pattern = value general_patternand 'k general_pattern = 'k pattern_desc pattern_dataand 'a pattern_data = {pat_desc : 'a; | 
pat_loc : Location.t; | 
pat_extra : (pat_extra * Location.t * attributes) list; | 
pat_type : Types.type_expr; | 
pat_env : Env.t; | 
pat_attributes : attributes; | 
}and pat_extra = | Tpat_constraint of core_type | (* P : T   | 
| Tpat_type of Path.t * Longident.t Asttypes.loc | (* #tconst  where   | 
| Tpat_open of Path.t * Longident.t Asttypes.loc * Env.t | |
| Tpat_unpack | (* (module P)   | 
and 'k pattern_desc = | Tpat_any : value pattern_desc | (* _ *) | 
| Tpat_var : Ident.t * string Asttypes.loc -> value pattern_desc | (* x *) | 
| Tpat_alias : value general_pattern * Ident.t * string Asttypes.loc -> value pattern_desc | (* P as a *) | 
| Tpat_constant : Asttypes.constant -> value pattern_desc | (* 1, 'a', "true", 1.0, 1l, 1L, 1n *) | 
| Tpat_tuple : value general_pattern list -> value pattern_desc | (* (P1, ..., Pn) Invariant: n >= 2 *) | 
| Tpat_construct : Longident.t Asttypes.loc * Types.constructor_description * value general_pattern list -> value pattern_desc | (* C  C P   | 
| Tpat_variant : Asttypes.label * value general_pattern option * Types.row_desc ref -> value pattern_desc | (* `A (None) `A P (Some P) See   | 
| Tpat_record : (Longident.t Asttypes.loc * Types.label_description * value general_pattern) list * Asttypes.closed_flag -> value pattern_desc | (* 
 Invariant: n > 0 *) | 
| Tpat_array : value general_pattern list -> value pattern_desc | (* 
  | 
| Tpat_lazy : value general_pattern -> value pattern_desc | (* lazy P *) | 
| Tpat_value : tpat_value_argument -> computation pattern_desc | (* P Invariant: Tpat_value pattern should not carry pat_attributes or pat_extra metadata coming from user syntax, which must be on the inner pattern node -- to facilitate searching for a certain value pattern constructor with a specific attributed. To enforce this restriction, we made the argument of the Tpat_value constructor a private synonym of   | 
| Tpat_exception : value general_pattern -> computation pattern_desc | (* exception P *) | 
| Tpat_or : 'k general_pattern * 'k general_pattern * Types.row_desc option -> 'k pattern_desc | (* P1 | P2 
  | 
and tpat_value_argument = private value general_patternand expression = {exp_desc : expression_desc; | 
exp_loc : Location.t; | 
exp_extra : (exp_extra * Location.t * attributes) list; | 
exp_type : Types.type_expr; | 
exp_env : Env.t; | 
exp_attributes : attributes; | 
}and expression_desc = | Texp_ident of Path.t * Longident.t Asttypes.loc * Types.value_description | (* x M.x *) | ||||
| Texp_constant of Asttypes.constant | (* 1, 'a', "true", 1.0, 1l, 1L, 1n *) | ||||
| Texp_let of Asttypes.rec_flag * value_binding list * expression | (* let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive) let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive) *) | ||||
| Texp_function of {
 } | (* 
 
 partial =   | ||||
| Texp_apply of expression * (Asttypes.arg_label * expression option) list | (* E0 ~l1:E1 ... ~ln:En The expression can be None if the expression is abstracted over this argument. It currently appears when a label is applied. For example: let f x ~y = x + y in f ~y:3 The resulting typedtree for the application is: Texp_apply (Texp_ident "f/1037",   | ||||
| Texp_match of expression * computation case list * partial | (* match E0 with | P1 -> E1 | P2 | exception P3 -> E2 | exception P4 -> E3 
  | ||||
| Texp_try of expression * value case list | (* try E with P1 -> E1 | ... | PN -> EN *) | ||||
| Texp_tuple of expression list | (* (E1, ..., EN) *) | ||||
| Texp_construct of Longident.t Asttypes.loc * Types.constructor_description * expression list | (* C  C E   | ||||
| Texp_variant of Asttypes.label * expression option | |||||
| Texp_record of {
 } | (* 
 Invariant: n > 0 If the type is   | ||||
| Texp_field of expression * Longident.t Asttypes.loc * Types.label_description | |||||
| Texp_setfield of expression * Longident.t Asttypes.loc * Types.label_description * expression | |||||
| Texp_array of expression list | |||||
| Texp_ifthenelse of expression * expression * expression option | |||||
| Texp_sequence of expression * expression | |||||
| Texp_while of expression * expression | |||||
| Texp_for of Ident.t * Parsetree.pattern * expression * expression * Asttypes.direction_flag * expression | |||||
| Texp_send of expression * meth * expression option | |||||
| Texp_new of Path.t * Longident.t Asttypes.loc * Types.class_declaration | |||||
| Texp_instvar of Path.t * Path.t * string Asttypes.loc | |||||
| Texp_setinstvar of Path.t * Path.t * string Asttypes.loc * expression | |||||
| Texp_override of Path.t * (Path.t * string Asttypes.loc * expression) list | |||||
| Texp_letmodule of Ident.t option * string option Asttypes.loc * Types.module_presence * module_expr * expression | |||||
| Texp_letexception of extension_constructor * expression | |||||
| Texp_assert of expression | |||||
| Texp_lazy of expression | |||||
| Texp_object of class_structure * string list | |||||
| Texp_pack of module_expr | |||||
| Texp_letop of {
 } | |||||
| Texp_unreachable | |||||
| Texp_extension_constructor of Longident.t Asttypes.loc * Path.t | |||||
| Texp_open of open_declaration * expression | (* let open  | 
and record_label_definition = | Kept of Types.type_expr | 
| Overridden of Longident.t Asttypes.loc * expression | 
and binding_op = {bop_op_path : Path.t; | 
bop_op_name : string Asttypes.loc; | 
bop_op_val : Types.value_description; | 
bop_op_type : Types.type_expr; | 
bop_exp : expression; | 
bop_loc : Location.t; | 
}and class_expr = {cl_desc : class_expr_desc; | 
cl_loc : Location.t; | 
cl_type : Types.class_type; | 
cl_env : Env.t; | 
cl_attributes : attributes; | 
}and class_expr_desc = | Tcl_ident of Path.t * Longident.t Asttypes.loc * core_type list | 
| Tcl_structure of class_structure | 
| Tcl_fun of Asttypes.arg_label * pattern * (Ident.t * expression) list * class_expr * partial | 
| Tcl_apply of class_expr * (Asttypes.arg_label * expression option) list | 
| Tcl_let of Asttypes.rec_flag * value_binding list * (Ident.t * expression) list * class_expr | 
| Tcl_constraint of class_expr * class_type option * string list * string list * Types.Concr.t | 
| Tcl_open of open_description * class_expr | 
and class_structure = {cstr_self : pattern; | 
cstr_fields : class_field list; | 
cstr_type : Types.class_signature; | 
cstr_meths : Ident.t Types.Meths.t; | 
}and class_field_kind = | Tcfk_virtual of core_type | 
| Tcfk_concrete of Asttypes.override_flag * expression | 
and class_field_desc = | Tcf_inherit of Asttypes.override_flag * class_expr * string option * (string * Ident.t) list * (string * Ident.t) list | 
| Tcf_val of string Asttypes.loc * Asttypes.mutable_flag * Ident.t * class_field_kind * bool | 
| Tcf_method of string Asttypes.loc * Asttypes.private_flag * class_field_kind | 
| Tcf_constraint of core_type * core_type | 
| Tcf_initializer of expression | 
| Tcf_attribute of attribute | 
and module_expr = {mod_desc : module_expr_desc; | 
mod_loc : Location.t; | 
mod_type : Types.module_type; | 
mod_env : Env.t; | 
mod_attributes : attributes; | 
}and module_type_constraint = | Tmodtype_implicit | (* The module type constraint has been synthesized during typechecking. *) | 
| Tmodtype_explicit of module_type | (* The module type was in the source file. *) | 
Annotations for Tmod_constraint.
and module_expr_desc = | Tmod_ident of Path.t * Longident.t Asttypes.loc | |
| Tmod_structure of structure | |
| Tmod_functor of functor_parameter * module_expr | |
| Tmod_apply of module_expr * module_expr * module_coercion | |
| Tmod_constraint of module_expr * Types.module_type * module_type_constraint * module_coercion | (* ME (constraint = Tmodtype_implicit) (ME : MT) (constraint = Tmodtype_explicit MT) *) | 
| Tmod_unpack of expression * Types.module_type | 
and structure_item_desc = | Tstr_eval of expression * attributes | 
| Tstr_value of Asttypes.rec_flag * value_binding list | 
| Tstr_primitive of value_description | 
| Tstr_type of Asttypes.rec_flag * type_declaration list | 
| Tstr_typext of type_extension | 
| Tstr_exception of type_exception | 
| Tstr_module of module_binding | 
| Tstr_recmodule of module_binding list | 
| Tstr_modtype of module_type_declaration | 
| Tstr_open of open_declaration | 
| Tstr_class of (class_declaration * string list) list | 
| Tstr_class_type of (Ident.t * string Asttypes.loc * class_type_declaration) list | 
| Tstr_include of include_declaration | 
| Tstr_attribute of attribute | 
and module_binding = {mb_id : Ident.t option; | 
mb_name : string option Asttypes.loc; | 
mb_presence : Types.module_presence; | 
mb_expr : module_expr; | 
mb_attributes : attributes; | 
mb_loc : Location.t; | 
}and value_binding = {vb_pat : pattern; | 
vb_expr : expression; | 
vb_attributes : attributes; | 
vb_loc : Location.t; | 
}and module_coercion = | Tcoerce_none | 
| Tcoerce_structure of (int * module_coercion) list * (Ident.t * int * module_coercion) list | 
| Tcoerce_functor of module_coercion * module_coercion | 
| Tcoerce_primitive of primitive_coercion | 
| Tcoerce_alias of Env.t * Path.t * module_coercion | 
and module_type = {mty_desc : module_type_desc; | 
mty_type : Types.module_type; | 
mty_env : Env.t; | 
mty_loc : Location.t; | 
mty_attributes : attributes; | 
}and module_type_desc = | Tmty_ident of Path.t * Longident.t Asttypes.loc | 
| Tmty_signature of signature | 
| Tmty_functor of functor_parameter * module_type | 
| Tmty_with of module_type * (Path.t * Longident.t Asttypes.loc * with_constraint) list | 
| Tmty_typeof of module_expr | 
| Tmty_alias of Path.t * Longident.t Asttypes.loc | 
and primitive_coercion = {pc_desc : Primitive.description; | 
pc_type : Types.type_expr; | 
pc_env : Env.t; | 
pc_loc : Location.t; | 
}and signature_item_desc = | Tsig_value of value_description | 
| Tsig_type of Asttypes.rec_flag * type_declaration list | 
| Tsig_typesubst of type_declaration list | 
| Tsig_typext of type_extension | 
| Tsig_exception of type_exception | 
| Tsig_module of module_declaration | 
| Tsig_modsubst of module_substitution | 
| Tsig_recmodule of module_declaration list | 
| Tsig_modtype of module_type_declaration | 
| Tsig_open of open_description | 
| Tsig_include of include_description | 
| Tsig_class of class_description list | 
| Tsig_class_type of class_type_declaration list | 
| Tsig_attribute of attribute | 
and module_declaration = {md_id : Ident.t option; | 
md_name : string option Asttypes.loc; | 
md_presence : Types.module_presence; | 
md_type : module_type; | 
md_attributes : attributes; | 
md_loc : Location.t; | 
}and module_substitution = {ms_id : Ident.t; | 
ms_name : string Asttypes.loc; | 
ms_manifest : Path.t; | 
ms_txt : Longident.t Asttypes.loc; | 
ms_attributes : attributes; | 
ms_loc : Location.t; | 
}and module_type_declaration = {mtd_id : Ident.t; | 
mtd_name : string Asttypes.loc; | 
mtd_type : module_type option; | 
mtd_attributes : attributes; | 
mtd_loc : Location.t; | 
}and 'a open_infos = {open_expr : 'a; | 
open_bound_items : Types.signature; | 
open_override : Asttypes.override_flag; | 
open_env : Env.t; | 
open_loc : Location.t; | 
open_attributes : attribute list; | 
}and open_description = (Path.t * Longident.t Asttypes.loc) open_infosand open_declaration = module_expr open_infosand 'a include_infos = {incl_mod : 'a; | 
incl_type : Types.signature; | 
incl_loc : Location.t; | 
incl_attributes : attribute list; | 
}and include_description = module_type include_infosand include_declaration = module_expr include_infosand with_constraint = | Twith_type of type_declaration | 
| Twith_module of Path.t * Longident.t Asttypes.loc | 
| Twith_typesubst of type_declaration | 
| Twith_modsubst of Path.t * Longident.t Asttypes.loc | 
and core_type = {mutable ctyp_desc : core_type_desc; | (* mutable because of   | 
mutable ctyp_type : Types.type_expr; | (* mutable because of   | 
ctyp_env : Env.t; | |
ctyp_loc : Location.t; | |
ctyp_attributes : attributes; | 
}and core_type_desc = | Ttyp_any | 
| Ttyp_var of string | 
| Ttyp_arrow of Asttypes.arg_label * core_type * core_type | 
| Ttyp_tuple of core_type list | 
| Ttyp_constr of Path.t * Longident.t Asttypes.loc * core_type list | 
| Ttyp_object of object_field list * Asttypes.closed_flag | 
| Ttyp_class of Path.t * Longident.t Asttypes.loc * core_type list | 
| Ttyp_alias of core_type * string | 
| Ttyp_variant of row_field list * Asttypes.closed_flag * Asttypes.label list option | 
| Ttyp_poly of string list * core_type | 
| Ttyp_package of package_type | 
and package_type = {pack_path : Path.t; | 
pack_fields : (Longident.t Asttypes.loc * core_type) list; | 
pack_type : Types.module_type; | 
pack_txt : Longident.t Asttypes.loc; | 
}and value_description = {val_id : Ident.t; | 
val_name : string Asttypes.loc; | 
val_desc : core_type; | 
val_val : Types.value_description; | 
val_prim : string list; | 
val_loc : Location.t; | 
val_attributes : attributes; | 
}and type_declaration = {typ_id : Ident.t; | 
typ_name : string Asttypes.loc; | 
typ_params : (core_type * (Asttypes.variance * Asttypes.injectivity)) list; | 
typ_type : Types.type_declaration; | 
typ_cstrs : (core_type * core_type * Location.t) list; | 
typ_kind : type_kind; | 
typ_private : Asttypes.private_flag; | 
typ_manifest : core_type option; | 
typ_loc : Location.t; | 
typ_attributes : attributes; | 
}and type_kind = | Ttype_abstract | 
| Ttype_variant of constructor_declaration list | 
| Ttype_record of label_declaration list | 
| Ttype_open | 
and label_declaration = {ld_id : Ident.t; | 
ld_name : string Asttypes.loc; | 
ld_mutable : Asttypes.mutable_flag; | 
ld_type : core_type; | 
ld_loc : Location.t; | 
ld_attributes : attributes; | 
}and constructor_declaration = {cd_id : Ident.t; | 
cd_name : string Asttypes.loc; | 
cd_args : constructor_arguments; | 
cd_res : core_type option; | 
cd_loc : Location.t; | 
cd_attributes : attributes; | 
}and type_extension = {tyext_path : Path.t; | 
tyext_txt : Longident.t Asttypes.loc; | 
tyext_params : (core_type * (Asttypes.variance * Asttypes.injectivity)) list; | 
tyext_constructors : extension_constructor list; | 
tyext_private : Asttypes.private_flag; | 
tyext_loc : Location.t; | 
tyext_attributes : attributes; | 
}and type_exception = {tyexn_constructor : extension_constructor; | 
tyexn_loc : Location.t; | 
tyexn_attributes : attribute list; | 
}and extension_constructor = {ext_id : Ident.t; | 
ext_name : string Asttypes.loc; | 
ext_type : Types.extension_constructor; | 
ext_kind : extension_constructor_kind; | 
ext_loc : Location.t; | 
ext_attributes : attributes; | 
}and extension_constructor_kind = | Text_decl of constructor_arguments * core_type option | 
| Text_rebind of Path.t * Longident.t Asttypes.loc | 
and class_type = {cltyp_desc : class_type_desc; | 
cltyp_type : Types.class_type; | 
cltyp_env : Env.t; | 
cltyp_loc : Location.t; | 
cltyp_attributes : attributes; | 
}and class_type_desc = | Tcty_constr of Path.t * Longident.t Asttypes.loc * core_type list | 
| Tcty_signature of class_signature | 
| Tcty_arrow of Asttypes.arg_label * core_type * class_type | 
| Tcty_open of open_description * class_type | 
and class_signature = {csig_self : core_type; | 
csig_fields : class_type_field list; | 
csig_type : Types.class_signature; | 
}and class_type_field = {ctf_desc : class_type_field_desc; | 
ctf_loc : Location.t; | 
ctf_attributes : attributes; | 
}and class_type_field_desc = | Tctf_inherit of class_type | 
| Tctf_val of string * Asttypes.mutable_flag * Asttypes.virtual_flag * core_type | 
| Tctf_method of string * Asttypes.private_flag * Asttypes.virtual_flag * core_type | 
| Tctf_constraint of core_type * core_type | 
| Tctf_attribute of attribute | 
and class_declaration = class_expr class_infosand class_description = class_type class_infosand class_type_declaration = class_type class_infosand 'a class_infos = {ci_virt : Asttypes.virtual_flag; | 
ci_params : (core_type * (Asttypes.variance * Asttypes.injectivity)) list; | 
ci_id_name : string Asttypes.loc; | 
ci_id_class : Ident.t; | 
ci_id_class_type : Ident.t; | 
ci_id_object : Ident.t; | 
ci_id_typehash : Ident.t; | 
ci_expr : 'a; | 
ci_decl : Types.class_declaration; | 
ci_type_decl : Types.class_type_declaration; | 
ci_loc : Location.t; | 
ci_attributes : attributes; | 
}val as_computation_pattern : pattern -> computation general_patternas_computation_pattern p is a computation pattern with description Tpat_value p, which enforces a correct placement of pat_attributes and pat_extra metadata (on the inner value pattern, rather than on the computation pattern).
val classify_pattern_desc : 'k pattern_desc -> 'k pattern_categoryval classify_pattern : 'k general_pattern -> 'k pattern_categoryval shallow_iter_pattern_desc : pattern_action -> 'k pattern_desc -> unitval shallow_map_pattern_desc : pattern_transformation -> 'k pattern_desc -> 'k pattern_descval iter_general_pattern : pattern_action -> 'k general_pattern -> unitval exists_general_pattern : pattern_predicate -> 'k general_pattern -> boolval let_bound_idents : value_binding list -> Ident.t listval let_bound_idents_full : value_binding list -> (Ident.t * string Asttypes.loc * Types.type_expr) listval alpha_pat : (Ident.t * Ident.t) list -> 'k general_pattern -> 'k general_patternAlpha conversion of patterns
val mknoloc : 'a -> 'a Asttypes.locval mkloc : 'a -> Location.t -> 'a Asttypes.locval pat_bound_idents : 'k general_pattern -> Ident.t listval pat_bound_idents_full : 'k general_pattern -> (Ident.t * string Asttypes.loc * Types.type_expr) listval split_pattern : computation general_pattern -> pattern option * pattern optionSplits an or pattern into its value (left) and exception (right) parts.