sig
  module Ast :
    sig
      module Location :
        sig
          type t =
            Location.t = {
            loc_start : Lexing.position;
            loc_end : Lexing.position;
            loc_ghost : bool;
          }
          val none : t
          val in_file : string -> t
          val init : Lexing.lexbuf -> string -> unit
          val curr : Lexing.lexbuf -> t
          val symbol_rloc : unit -> t
          val symbol_gloc : unit -> t
          val rhs_loc : int -> t
          val input_name : string ref
          val input_lexbuf : Lexing.lexbuf option ref
          val get_pos_info : Lexing.position -> string * int * int
          val print_loc : Format.formatter -> t -> unit
          val print_error : Format.formatter -> t -> unit
          val print_error_cur_file : Format.formatter -> unit -> unit
          val print_warning : t -> Format.formatter -> Warnings.t -> unit
          val formatter_for_warnings : Format.formatter ref
          val prerr_warning : t -> Warnings.t -> unit
          val echo_eof : unit -> unit
          val reset : unit -> unit
          val warning_printer :
            (t -> Format.formatter -> Warnings.t -> unit) ref
          val default_warning_printer :
            t -> Format.formatter -> Warnings.t -> unit
          val highlight_locations : Format.formatter -> t list -> bool
          type 'a loc = 'Location.loc = { txt : 'a; loc : t; }
          val mknoloc : '-> 'a loc
          val mkloc : '-> t -> 'a loc
          val print : Format.formatter -> t -> unit
          val print_compact : Format.formatter -> t -> unit
          val print_filename : Format.formatter -> string -> unit
          val absolute_path : string -> string
          val show_filename : string -> string
          val absname : bool ref
          type error =
            Location.error = {
            loc : t;
            msg : string;
            sub : error list;
            if_highlight : string;
          }
          exception Error of error
          val print_error_prefix : Format.formatter -> unit -> unit
          val error :
            ?loc:t ->
            ?sub:error list -> ?if_highlight:string -> string -> error
          val errorf :
            ?loc:t ->
            ?sub:error list ->
            ?if_highlight:string ->
            ('a, Format.formatter, unit, error) format4 -> 'a
          val raise_errorf :
            ?loc:t ->
            ?sub:error list ->
            ?if_highlight:string ->
            ('a, Format.formatter, unit, 'b) format4 -> 'a
          val error_of_printer :
            t -> (Format.formatter -> '-> unit) -> '-> error
          val error_of_printer_file :
            (Format.formatter -> '-> unit) -> '-> error
          val error_of_exn : exn -> error option
          val register_error_of_exn : (exn -> error option) -> unit
          val report_error : Format.formatter -> error -> unit
          val error_reporter : (Format.formatter -> error -> unit) ref
          val default_error_reporter : Format.formatter -> error -> unit
          val report_exception : Format.formatter -> exn -> unit
        end
      module Longident :
        sig
          type t =
            Longident.t =
              Lident of string
            | Ldot of t * string
            | Lapply of t * t
          val flatten : t -> string list
          val last : t -> string
          val parse : string -> t
        end
      module Asttypes :
        sig
          type constant =
            Ast_403.Asttypes.constant =
              Const_int of int
            | Const_char of char
            | Const_string of string * string option
            | Const_float of string
            | Const_int32 of int32
            | Const_int64 of int64
            | Const_nativeint of nativeint
          type rec_flag =
            Ast_403.Asttypes.rec_flag =
              Nonrecursive
            | Recursive
          type direction_flag =
            Ast_403.Asttypes.direction_flag =
              Upto
            | Downto
          type private_flag =
            Ast_403.Asttypes.private_flag =
              Private
            | Public
          type mutable_flag =
            Ast_403.Asttypes.mutable_flag =
              Immutable
            | Mutable
          type virtual_flag =
            Ast_403.Asttypes.virtual_flag =
              Virtual
            | Concrete
          type override_flag =
            Ast_403.Asttypes.override_flag =
              Override
            | Fresh
          type closed_flag = Ast_403.Asttypes.closed_flag = Closed | Open
          type label = string
          type arg_label =
            Ast_403.Asttypes.arg_label =
              Nolabel
            | Labelled of string
            | Optional of string
          type 'a loc = 'Location.loc = { txt : 'a; loc : Location.t; }
          type variance =
            Ast_403.Asttypes.variance =
              Covariant
            | Contravariant
            | Invariant
        end
      module Parsetree :
        sig
          type constant =
            Ast_403.Parsetree.constant =
              Pconst_integer of string * char option
            | Pconst_char of char
            | Pconst_string of string * string option
            | Pconst_float of string * char option
          type attribute = string Asttypes.loc * payload
          and extension = string Asttypes.loc * payload
          and attributes = attribute list
          and payload =
            Ast_403.Parsetree.payload =
              PStr of structure
            | PSig of signature
            | PTyp of core_type
            | PPat of pattern * expression option
          and core_type =
            Ast_403.Parsetree.core_type = {
            ptyp_desc : core_type_desc;
            ptyp_loc : Location.t;
            ptyp_attributes : attributes;
          }
          and core_type_desc =
            Ast_403.Parsetree.core_type_desc =
              Ptyp_any
            | Ptyp_var of string
            | Ptyp_arrow of Asttypes.arg_label * core_type * core_type
            | Ptyp_tuple of core_type list
            | Ptyp_constr of Longident.t Asttypes.loc * core_type list
            | Ptyp_object of (string * attributes * core_type) list *
                Asttypes.closed_flag
            | Ptyp_class of Longident.t Asttypes.loc * core_type list
            | Ptyp_alias of core_type * string
            | Ptyp_variant of row_field list * Asttypes.closed_flag *
                Asttypes.label list option
            | Ptyp_poly of string list * core_type
            | Ptyp_package of package_type
            | Ptyp_extension of extension
          and package_type =
              Longident.t Asttypes.loc *
              (Longident.t Asttypes.loc * core_type) list
          and row_field =
            Ast_403.Parsetree.row_field =
              Rtag of Asttypes.label * attributes * bool * core_type list
            | Rinherit of core_type
          and pattern =
            Ast_403.Parsetree.pattern = {
            ppat_desc : pattern_desc;
            ppat_loc : Location.t;
            ppat_attributes : attributes;
          }
          and pattern_desc =
            Ast_403.Parsetree.pattern_desc =
              Ppat_any
            | Ppat_var of string Asttypes.loc
            | Ppat_alias of pattern * string Asttypes.loc
            | Ppat_constant of constant
            | Ppat_interval of constant * constant
            | Ppat_tuple of pattern list
            | Ppat_construct of Longident.t Asttypes.loc * pattern option
            | Ppat_variant of Asttypes.label * pattern option
            | Ppat_record of (Longident.t Asttypes.loc * pattern) list *
                Asttypes.closed_flag
            | Ppat_array of pattern list
            | Ppat_or of pattern * pattern
            | Ppat_constraint of pattern * core_type
            | Ppat_type of Longident.t Asttypes.loc
            | Ppat_lazy of pattern
            | Ppat_unpack of string Asttypes.loc
            | Ppat_exception of pattern
            | Ppat_extension of extension
          and expression =
            Ast_403.Parsetree.expression = {
            pexp_desc : expression_desc;
            pexp_loc : Location.t;
            pexp_attributes : attributes;
          }
          and expression_desc =
            Ast_403.Parsetree.expression_desc =
              Pexp_ident of Longident.t Asttypes.loc
            | Pexp_constant of constant
            | Pexp_let of Asttypes.rec_flag * value_binding list * expression
            | Pexp_function of case list
            | Pexp_fun of Asttypes.arg_label * expression option * pattern *
                expression
            | Pexp_apply of expression *
                (Asttypes.arg_label * expression) list
            | Pexp_match of expression * case list
            | Pexp_try of expression * case list
            | Pexp_tuple of expression list
            | Pexp_construct of Longident.t Asttypes.loc * expression option
            | Pexp_variant of Asttypes.label * expression option
            | Pexp_record of (Longident.t Asttypes.loc * expression) list *
                expression option
            | Pexp_field of expression * Longident.t Asttypes.loc
            | Pexp_setfield of expression * Longident.t Asttypes.loc *
                expression
            | Pexp_array of expression list
            | Pexp_ifthenelse of expression * expression * expression option
            | Pexp_sequence of expression * expression
            | Pexp_while of expression * expression
            | Pexp_for of pattern * expression * expression *
                Asttypes.direction_flag * expression
            | Pexp_constraint of expression * core_type
            | Pexp_coerce of expression * core_type option * core_type
            | Pexp_send of expression * string
            | Pexp_new of Longident.t Asttypes.loc
            | Pexp_setinstvar of string Asttypes.loc * expression
            | Pexp_override of (string Asttypes.loc * expression) list
            | Pexp_letmodule of string Asttypes.loc * module_expr *
                expression
            | Pexp_assert of expression
            | Pexp_lazy of expression
            | Pexp_poly of expression * core_type option
            | Pexp_object of class_structure
            | Pexp_newtype of string * expression
            | Pexp_pack of module_expr
            | Pexp_open of Asttypes.override_flag *
                Longident.t Asttypes.loc * expression
            | Pexp_extension of extension
            | Pexp_unreachable
          and case =
            Ast_403.Parsetree.case = {
            pc_lhs : pattern;
            pc_guard : expression option;
            pc_rhs : expression;
          }
          and value_description =
            Ast_403.Parsetree.value_description = {
            pval_name : string Asttypes.loc;
            pval_type : core_type;
            pval_prim : string list;
            pval_attributes : attributes;
            pval_loc : Location.t;
          }
          and type_declaration =
            Ast_403.Parsetree.type_declaration = {
            ptype_name : string Asttypes.loc;
            ptype_params : (core_type * Asttypes.variance) list;
            ptype_cstrs : (core_type * core_type * Location.t) list;
            ptype_kind : type_kind;
            ptype_private : Asttypes.private_flag;
            ptype_manifest : core_type option;
            ptype_attributes : attributes;
            ptype_loc : Location.t;
          }
          and type_kind =
            Ast_403.Parsetree.type_kind =
              Ptype_abstract
            | Ptype_variant of constructor_declaration list
            | Ptype_record of label_declaration list
            | Ptype_open
          and label_declaration =
            Ast_403.Parsetree.label_declaration = {
            pld_name : string Asttypes.loc;
            pld_mutable : Asttypes.mutable_flag;
            pld_type : core_type;
            pld_loc : Location.t;
            pld_attributes : attributes;
          }
          and constructor_declaration =
            Ast_403.Parsetree.constructor_declaration = {
            pcd_name : string Asttypes.loc;
            pcd_args : constructor_arguments;
            pcd_res : core_type option;
            pcd_loc : Location.t;
            pcd_attributes : attributes;
          }
          and constructor_arguments =
            Ast_403.Parsetree.constructor_arguments =
              Pcstr_tuple of core_type list
            | Pcstr_record of label_declaration list
          and type_extension =
            Ast_403.Parsetree.type_extension = {
            ptyext_path : Longident.t Asttypes.loc;
            ptyext_params : (core_type * Asttypes.variance) list;
            ptyext_constructors : extension_constructor list;
            ptyext_private : Asttypes.private_flag;
            ptyext_attributes : attributes;
          }
          and extension_constructor =
            Ast_403.Parsetree.extension_constructor = {
            pext_name : string Asttypes.loc;
            pext_kind : extension_constructor_kind;
            pext_loc : Location.t;
            pext_attributes : attributes;
          }
          and extension_constructor_kind =
            Ast_403.Parsetree.extension_constructor_kind =
              Pext_decl of constructor_arguments * core_type option
            | Pext_rebind of Longident.t Asttypes.loc
          and class_type =
            Ast_403.Parsetree.class_type = {
            pcty_desc : class_type_desc;
            pcty_loc : Location.t;
            pcty_attributes : attributes;
          }
          and class_type_desc =
            Ast_403.Parsetree.class_type_desc =
              Pcty_constr of Longident.t Asttypes.loc * core_type list
            | Pcty_signature of class_signature
            | Pcty_arrow of Asttypes.arg_label * core_type * class_type
            | Pcty_extension of extension
          and class_signature =
            Ast_403.Parsetree.class_signature = {
            pcsig_self : core_type;
            pcsig_fields : class_type_field list;
          }
          and class_type_field =
            Ast_403.Parsetree.class_type_field = {
            pctf_desc : class_type_field_desc;
            pctf_loc : Location.t;
            pctf_attributes : attributes;
          }
          and class_type_field_desc =
            Ast_403.Parsetree.class_type_field_desc =
              Pctf_inherit of class_type
            | Pctf_val of
                (string * Asttypes.mutable_flag * Asttypes.virtual_flag *
                 core_type)
            | Pctf_method of
                (string * Asttypes.private_flag * Asttypes.virtual_flag *
                 core_type)
            | Pctf_constraint of (core_type * core_type)
            | Pctf_attribute of attribute
            | Pctf_extension of extension
          and 'a class_infos =
            'Ast_403.Parsetree.class_infos = {
            pci_virt : Asttypes.virtual_flag;
            pci_params : (core_type * Asttypes.variance) list;
            pci_name : string Asttypes.loc;
            pci_expr : 'a;
            pci_loc : Location.t;
            pci_attributes : attributes;
          }
          and class_description = class_type class_infos
          and class_type_declaration = class_type class_infos
          and class_expr =
            Ast_403.Parsetree.class_expr = {
            pcl_desc : class_expr_desc;
            pcl_loc : Location.t;
            pcl_attributes : attributes;
          }
          and class_expr_desc =
            Ast_403.Parsetree.class_expr_desc =
              Pcl_constr of Longident.t Asttypes.loc * core_type list
            | Pcl_structure of class_structure
            | Pcl_fun of Asttypes.arg_label * expression option * pattern *
                class_expr
            | Pcl_apply of class_expr *
                (Asttypes.arg_label * expression) list
            | Pcl_let of Asttypes.rec_flag * value_binding list * class_expr
            | Pcl_constraint of class_expr * class_type
            | Pcl_extension of extension
          and class_structure =
            Ast_403.Parsetree.class_structure = {
            pcstr_self : pattern;
            pcstr_fields : class_field list;
          }
          and class_field =
            Ast_403.Parsetree.class_field = {
            pcf_desc : class_field_desc;
            pcf_loc : Location.t;
            pcf_attributes : attributes;
          }
          and class_field_desc =
            Ast_403.Parsetree.class_field_desc =
              Pcf_inherit of Asttypes.override_flag * class_expr *
                string option
            | Pcf_val of
                (string Asttypes.loc * Asttypes.mutable_flag *
                 class_field_kind)
            | Pcf_method of
                (string Asttypes.loc * Asttypes.private_flag *
                 class_field_kind)
            | Pcf_constraint of (core_type * core_type)
            | Pcf_initializer of expression
            | Pcf_attribute of attribute
            | Pcf_extension of extension
          and class_field_kind =
            Ast_403.Parsetree.class_field_kind =
              Cfk_virtual of core_type
            | Cfk_concrete of Asttypes.override_flag * expression
          and class_declaration = class_expr class_infos
          and module_type =
            Ast_403.Parsetree.module_type = {
            pmty_desc : module_type_desc;
            pmty_loc : Location.t;
            pmty_attributes : attributes;
          }
          and module_type_desc =
            Ast_403.Parsetree.module_type_desc =
              Pmty_ident of Longident.t Asttypes.loc
            | Pmty_signature of signature
            | Pmty_functor of string Asttypes.loc * module_type option *
                module_type
            | Pmty_with of module_type * with_constraint list
            | Pmty_typeof of module_expr
            | Pmty_extension of extension
            | Pmty_alias of Longident.t Asttypes.loc
          and signature = signature_item list
          and signature_item =
            Ast_403.Parsetree.signature_item = {
            psig_desc : signature_item_desc;
            psig_loc : Location.t;
          }
          and signature_item_desc =
            Ast_403.Parsetree.signature_item_desc =
              Psig_value of value_description
            | Psig_type of Asttypes.rec_flag * type_declaration list
            | Psig_typext of type_extension
            | Psig_exception of extension_constructor
            | Psig_module of module_declaration
            | Psig_recmodule of module_declaration list
            | Psig_modtype of module_type_declaration
            | Psig_open of open_description
            | Psig_include of include_description
            | Psig_class of class_description list
            | Psig_class_type of class_type_declaration list
            | Psig_attribute of attribute
            | Psig_extension of extension * attributes
          and module_declaration =
            Ast_403.Parsetree.module_declaration = {
            pmd_name : string Asttypes.loc;
            pmd_type : module_type;
            pmd_attributes : attributes;
            pmd_loc : Location.t;
          }
          and module_type_declaration =
            Ast_403.Parsetree.module_type_declaration = {
            pmtd_name : string Asttypes.loc;
            pmtd_type : module_type option;
            pmtd_attributes : attributes;
            pmtd_loc : Location.t;
          }
          and open_description =
            Ast_403.Parsetree.open_description = {
            popen_lid : Longident.t Asttypes.loc;
            popen_override : Asttypes.override_flag;
            popen_loc : Location.t;
            popen_attributes : attributes;
          }
          and 'a include_infos =
            'Ast_403.Parsetree.include_infos = {
            pincl_mod : 'a;
            pincl_loc : Location.t;
            pincl_attributes : attributes;
          }
          and include_description = module_type include_infos
          and include_declaration = module_expr include_infos
          and with_constraint =
            Ast_403.Parsetree.with_constraint =
              Pwith_type of Longident.t Asttypes.loc * type_declaration
            | Pwith_module of Longident.t Asttypes.loc *
                Longident.t Asttypes.loc
            | Pwith_typesubst of type_declaration
            | Pwith_modsubst of string Asttypes.loc *
                Longident.t Asttypes.loc
          and module_expr =
            Ast_403.Parsetree.module_expr = {
            pmod_desc : module_expr_desc;
            pmod_loc : Location.t;
            pmod_attributes : attributes;
          }
          and module_expr_desc =
            Ast_403.Parsetree.module_expr_desc =
              Pmod_ident of Longident.t Asttypes.loc
            | Pmod_structure of structure
            | Pmod_functor of string Asttypes.loc * module_type option *
                module_expr
            | Pmod_apply of module_expr * module_expr
            | Pmod_constraint of module_expr * module_type
            | Pmod_unpack of expression
            | Pmod_extension of extension
          and structure = structure_item list
          and structure_item =
            Ast_403.Parsetree.structure_item = {
            pstr_desc : structure_item_desc;
            pstr_loc : Location.t;
          }
          and structure_item_desc =
            Ast_403.Parsetree.structure_item_desc =
              Pstr_eval of expression * attributes
            | Pstr_value of Asttypes.rec_flag * value_binding list
            | Pstr_primitive of value_description
            | Pstr_type of Asttypes.rec_flag * type_declaration list
            | Pstr_typext of type_extension
            | Pstr_exception of extension_constructor
            | Pstr_module of module_binding
            | Pstr_recmodule of module_binding list
            | Pstr_modtype of module_type_declaration
            | Pstr_open of open_description
            | Pstr_class of class_declaration list
            | Pstr_class_type of class_type_declaration list
            | Pstr_include of include_declaration
            | Pstr_attribute of attribute
            | Pstr_extension of extension * attributes
          and value_binding =
            Ast_403.Parsetree.value_binding = {
            pvb_pat : pattern;
            pvb_expr : expression;
            pvb_attributes : attributes;
            pvb_loc : Location.t;
          }
          and module_binding =
            Ast_403.Parsetree.module_binding = {
            pmb_name : string Asttypes.loc;
            pmb_expr : module_expr;
            pmb_attributes : attributes;
            pmb_loc : Location.t;
          }
          type toplevel_phrase =
            Ast_403.Parsetree.toplevel_phrase =
              Ptop_def of structure
            | Ptop_dir of string * directive_argument
          and directive_argument =
            Ast_403.Parsetree.directive_argument =
              Pdir_none
            | Pdir_string of string
            | Pdir_int of string * char option
            | Pdir_ident of Longident.t
            | Pdir_bool of bool
        end
      module Docstrings :
        sig
          type docstring = Ast_403.Docstrings.docstring
          val docstring : string -> Location.t -> docstring
          val docstring_body : docstring -> string
          val docstring_loc : docstring -> Location.t
          type docs =
            Ast_403.Docstrings.docs = {
            docs_pre : docstring option;
            docs_post : docstring option;
          }
          val empty_docs : docs
          val docs_attr : docstring -> Parsetree.attribute
          val add_docs_attrs :
            docs -> Parsetree.attributes -> Parsetree.attributes
          type info = docstring option
          val empty_info : info
          val info_attr : docstring -> Parsetree.attribute
          val add_info_attrs :
            info -> Parsetree.attributes -> Parsetree.attributes
          type text = docstring list
          val empty_text : text
          val text_attr : docstring -> Parsetree.attribute
          val add_text_attrs :
            text -> Parsetree.attributes -> Parsetree.attributes
        end
      module Ast_helper :
        sig
          type lid = Longident.t Asttypes.loc
          type str = string Asttypes.loc
          type loc = Location.t
          type attrs = Parsetree.attribute list
          val default_loc : loc ref
          val with_default_loc : loc -> (unit -> 'a) -> 'a
          module Const :
            sig
              val char : char -> Parsetree.constant
              val string :
                ?quotation_delimiter:string -> string -> Parsetree.constant
              val integer : ?suffix:char -> string -> Parsetree.constant
              val int : ?suffix:char -> int -> Parsetree.constant
              val int32 : ?suffix:char -> int32 -> Parsetree.constant
              val int64 : ?suffix:char -> int64 -> Parsetree.constant
              val nativeint : ?suffix:char -> nativeint -> Parsetree.constant
              val float : ?suffix:char -> string -> Parsetree.constant
            end
          module Typ :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.core_type_desc -> Parsetree.core_type
              val attr :
                Parsetree.core_type ->
                Parsetree.attribute -> Parsetree.core_type
              val any :
                ?loc:loc -> ?attrs:attrs -> unit -> Parsetree.core_type
              val var :
                ?loc:loc -> ?attrs:attrs -> string -> Parsetree.core_type
              val arrow :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.arg_label ->
                Parsetree.core_type ->
                Parsetree.core_type -> Parsetree.core_type
              val tuple :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.core_type list -> Parsetree.core_type
              val constr :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.core_type list -> Parsetree.core_type
              val object_ :
                ?loc:loc ->
                ?attrs:attrs ->
                (string * Parsetree.attributes * Parsetree.core_type) list ->
                Asttypes.closed_flag -> Parsetree.core_type
              val class_ :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.core_type list -> Parsetree.core_type
              val alias :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.core_type -> string -> Parsetree.core_type
              val variant :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.row_field list ->
                Asttypes.closed_flag ->
                Asttypes.label list option -> Parsetree.core_type
              val poly :
                ?loc:loc ->
                ?attrs:attrs ->
                string list -> Parsetree.core_type -> Parsetree.core_type
              val package :
                ?loc:loc ->
                ?attrs:attrs ->
                lid ->
                (lid * Parsetree.core_type) list -> Parsetree.core_type
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.core_type
              val force_poly : Parsetree.core_type -> Parsetree.core_type
            end
          module Pat :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern_desc -> Parsetree.pattern
              val attr :
                Parsetree.pattern -> Parsetree.attribute -> Parsetree.pattern
              val any : ?loc:loc -> ?attrs:attrs -> unit -> Parsetree.pattern
              val var : ?loc:loc -> ?attrs:attrs -> str -> Parsetree.pattern
              val alias :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern -> str -> Parsetree.pattern
              val constant :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.constant -> Parsetree.pattern
              val interval :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.constant -> Parsetree.constant -> Parsetree.pattern
              val tuple :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern list -> Parsetree.pattern
              val construct :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.pattern option -> Parsetree.pattern
              val variant :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.label ->
                Parsetree.pattern option -> Parsetree.pattern
              val record :
                ?loc:loc ->
                ?attrs:attrs ->
                (lid * Parsetree.pattern) list ->
                Asttypes.closed_flag -> Parsetree.pattern
              val array :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern list -> Parsetree.pattern
              val or_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.pattern -> Parsetree.pattern -> Parsetree.pattern
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.pattern -> Parsetree.core_type -> Parsetree.pattern
              val type_ :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.pattern
              val lazy_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern -> Parsetree.pattern
              val unpack :
                ?loc:loc -> ?attrs:attrs -> str -> Parsetree.pattern
              val exception_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.pattern -> Parsetree.pattern
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.pattern
            end
          module Exp :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression_desc -> Parsetree.expression
              val attr :
                Parsetree.expression ->
                Parsetree.attribute -> Parsetree.expression
              val ident :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.expression
              val constant :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.constant -> Parsetree.expression
              val let_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.rec_flag ->
                Parsetree.value_binding list ->
                Parsetree.expression -> Parsetree.expression
              val fun_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.arg_label ->
                Parsetree.expression option ->
                Parsetree.pattern ->
                Parsetree.expression -> Parsetree.expression
              val function_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.case list -> Parsetree.expression
              val apply :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                (Asttypes.arg_label * Parsetree.expression) list ->
                Parsetree.expression
              val match_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.case list -> Parsetree.expression
              val try_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.case list -> Parsetree.expression
              val tuple :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression list -> Parsetree.expression
              val construct :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.expression option -> Parsetree.expression
              val variant :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.label ->
                Parsetree.expression option -> Parsetree.expression
              val record :
                ?loc:loc ->
                ?attrs:attrs ->
                (lid * Parsetree.expression) list ->
                Parsetree.expression option -> Parsetree.expression
              val field :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression -> lid -> Parsetree.expression
              val setfield :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                lid -> Parsetree.expression -> Parsetree.expression
              val array :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression list -> Parsetree.expression
              val ifthenelse :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.expression ->
                Parsetree.expression option -> Parsetree.expression
              val sequence :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.expression -> Parsetree.expression
              val while_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.expression -> Parsetree.expression
              val for_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.pattern ->
                Parsetree.expression ->
                Parsetree.expression ->
                Asttypes.direction_flag ->
                Parsetree.expression -> Parsetree.expression
              val coerce :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.core_type option ->
                Parsetree.core_type -> Parsetree.expression
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.core_type -> Parsetree.expression
              val send :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression -> string -> Parsetree.expression
              val new_ :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.expression
              val setinstvar :
                ?loc:loc ->
                ?attrs:attrs ->
                str -> Parsetree.expression -> Parsetree.expression
              val override :
                ?loc:loc ->
                ?attrs:attrs ->
                (str * Parsetree.expression) list -> Parsetree.expression
              val letmodule :
                ?loc:loc ->
                ?attrs:attrs ->
                str ->
                Parsetree.module_expr ->
                Parsetree.expression -> Parsetree.expression
              val assert_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.expression -> Parsetree.expression
              val lazy_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.expression -> Parsetree.expression
              val poly :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.expression ->
                Parsetree.core_type option -> Parsetree.expression
              val object_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_structure -> Parsetree.expression
              val newtype :
                ?loc:loc ->
                ?attrs:attrs ->
                string -> Parsetree.expression -> Parsetree.expression
              val pack :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.module_expr -> Parsetree.expression
              val open_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.override_flag ->
                lid -> Parsetree.expression -> Parsetree.expression
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.expression
              val unreachable :
                ?loc:loc -> ?attrs:attrs -> unit -> Parsetree.expression
              val case :
                Parsetree.pattern ->
                ?guard:Parsetree.expression ->
                Parsetree.expression -> Parsetree.case
            end
          module Val :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?prim:string list ->
                str -> Parsetree.core_type -> Parsetree.value_description
            end
          module Type :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                ?params:(Parsetree.core_type * Asttypes.variance) list ->
                ?cstrs:(Parsetree.core_type * Parsetree.core_type * loc) list ->
                ?kind:Parsetree.type_kind ->
                ?priv:Asttypes.private_flag ->
                ?manifest:Parsetree.core_type ->
                str -> Parsetree.type_declaration
              val constructor :
                ?loc:loc ->
                ?attrs:attrs ->
                ?info:Docstrings.info ->
                ?args:Parsetree.constructor_arguments ->
                ?res:Parsetree.core_type ->
                str -> Parsetree.constructor_declaration
              val field :
                ?loc:loc ->
                ?attrs:attrs ->
                ?info:Docstrings.info ->
                ?mut:Asttypes.mutable_flag ->
                str -> Parsetree.core_type -> Parsetree.label_declaration
            end
          module Te :
            sig
              val mk :
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?params:(Parsetree.core_type * Asttypes.variance) list ->
                ?priv:Asttypes.private_flag ->
                lid ->
                Parsetree.extension_constructor list ->
                Parsetree.type_extension
              val constructor :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?info:Docstrings.info ->
                str ->
                Parsetree.extension_constructor_kind ->
                Parsetree.extension_constructor
              val decl :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?info:Docstrings.info ->
                ?args:Parsetree.constructor_arguments ->
                ?res:Parsetree.core_type ->
                str -> Parsetree.extension_constructor
              val rebind :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?info:Docstrings.info ->
                str -> lid -> Parsetree.extension_constructor
            end
          module Mty :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_type_desc -> Parsetree.module_type
              val attr :
                Parsetree.module_type ->
                Parsetree.attribute -> Parsetree.module_type
              val ident :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.module_type
              val alias :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.module_type
              val signature :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.signature -> Parsetree.module_type
              val functor_ :
                ?loc:loc ->
                ?attrs:attrs ->
                str ->
                Parsetree.module_type option ->
                Parsetree.module_type -> Parsetree.module_type
              val with_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_type ->
                Parsetree.with_constraint list -> Parsetree.module_type
              val typeof_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_expr -> Parsetree.module_type
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.module_type
            end
          module Mod :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_expr_desc -> Parsetree.module_expr
              val attr :
                Parsetree.module_expr ->
                Parsetree.attribute -> Parsetree.module_expr
              val ident :
                ?loc:loc -> ?attrs:attrs -> lid -> Parsetree.module_expr
              val structure :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.structure -> Parsetree.module_expr
              val functor_ :
                ?loc:loc ->
                ?attrs:attrs ->
                str ->
                Parsetree.module_type option ->
                Parsetree.module_expr -> Parsetree.module_expr
              val apply :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_expr ->
                Parsetree.module_expr -> Parsetree.module_expr
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.module_expr ->
                Parsetree.module_type -> Parsetree.module_expr
              val unpack :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.expression -> Parsetree.module_expr
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.module_expr
            end
          module Sig :
            sig
              val mk :
                ?loc:loc ->
                Parsetree.signature_item_desc -> Parsetree.signature_item
              val value :
                ?loc:loc ->
                Parsetree.value_description -> Parsetree.signature_item
              val type_ :
                ?loc:loc ->
                Asttypes.rec_flag ->
                Parsetree.type_declaration list -> Parsetree.signature_item
              val type_extension :
                ?loc:loc ->
                Parsetree.type_extension -> Parsetree.signature_item
              val exception_ :
                ?loc:loc ->
                Parsetree.extension_constructor -> Parsetree.signature_item
              val module_ :
                ?loc:loc ->
                Parsetree.module_declaration -> Parsetree.signature_item
              val rec_module :
                ?loc:loc ->
                Parsetree.module_declaration list -> Parsetree.signature_item
              val modtype :
                ?loc:loc ->
                Parsetree.module_type_declaration -> Parsetree.signature_item
              val open_ :
                ?loc:loc ->
                Parsetree.open_description -> Parsetree.signature_item
              val include_ :
                ?loc:loc ->
                Parsetree.include_description -> Parsetree.signature_item
              val class_ :
                ?loc:loc ->
                Parsetree.class_description list -> Parsetree.signature_item
              val class_type :
                ?loc:loc ->
                Parsetree.class_type_declaration list ->
                Parsetree.signature_item
              val extension :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.extension -> Parsetree.signature_item
              val attribute :
                ?loc:loc -> Parsetree.attribute -> Parsetree.signature_item
              val text : Docstrings.text -> Parsetree.signature_item list
            end
          module Str :
            sig
              val mk :
                ?loc:loc ->
                Parsetree.structure_item_desc -> Parsetree.structure_item
              val eval :
                ?loc:loc ->
                ?attrs:Parsetree.attributes ->
                Parsetree.expression -> Parsetree.structure_item
              val value :
                ?loc:loc ->
                Asttypes.rec_flag ->
                Parsetree.value_binding list -> Parsetree.structure_item
              val primitive :
                ?loc:loc ->
                Parsetree.value_description -> Parsetree.structure_item
              val type_ :
                ?loc:loc ->
                Asttypes.rec_flag ->
                Parsetree.type_declaration list -> Parsetree.structure_item
              val type_extension :
                ?loc:loc ->
                Parsetree.type_extension -> Parsetree.structure_item
              val exception_ :
                ?loc:loc ->
                Parsetree.extension_constructor -> Parsetree.structure_item
              val module_ :
                ?loc:loc ->
                Parsetree.module_binding -> Parsetree.structure_item
              val rec_module :
                ?loc:loc ->
                Parsetree.module_binding list -> Parsetree.structure_item
              val modtype :
                ?loc:loc ->
                Parsetree.module_type_declaration -> Parsetree.structure_item
              val open_ :
                ?loc:loc ->
                Parsetree.open_description -> Parsetree.structure_item
              val class_ :
                ?loc:loc ->
                Parsetree.class_declaration list -> Parsetree.structure_item
              val class_type :
                ?loc:loc ->
                Parsetree.class_type_declaration list ->
                Parsetree.structure_item
              val include_ :
                ?loc:loc ->
                Parsetree.include_declaration -> Parsetree.structure_item
              val extension :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.extension -> Parsetree.structure_item
              val attribute :
                ?loc:loc -> Parsetree.attribute -> Parsetree.structure_item
              val text : Docstrings.text -> Parsetree.structure_item list
            end
          module Md :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                str -> Parsetree.module_type -> Parsetree.module_declaration
            end
          module Mtd :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                ?typ:Parsetree.module_type ->
                str -> Parsetree.module_type_declaration
            end
          module Mb :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                str -> Parsetree.module_expr -> Parsetree.module_binding
            end
          module Opn :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?override:Asttypes.override_flag ->
                lid -> Parsetree.open_description
            end
          module Incl :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs -> '-> 'Parsetree.include_infos
            end
          module Vb :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                Parsetree.pattern ->
                Parsetree.expression -> Parsetree.value_binding
            end
          module Cty :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_type_desc -> Parsetree.class_type
              val attr :
                Parsetree.class_type ->
                Parsetree.attribute -> Parsetree.class_type
              val constr :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.core_type list -> Parsetree.class_type
              val signature :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_signature -> Parsetree.class_type
              val arrow :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.arg_label ->
                Parsetree.core_type ->
                Parsetree.class_type -> Parsetree.class_type
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.class_type
            end
          module Ctf :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                Parsetree.class_type_field_desc -> Parsetree.class_type_field
              val attr :
                Parsetree.class_type_field ->
                Parsetree.attribute -> Parsetree.class_type_field
              val inherit_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_type -> Parsetree.class_type_field
              val val_ :
                ?loc:loc ->
                ?attrs:attrs ->
                string ->
                Asttypes.mutable_flag ->
                Asttypes.virtual_flag ->
                Parsetree.core_type -> Parsetree.class_type_field
              val method_ :
                ?loc:loc ->
                ?attrs:attrs ->
                string ->
                Asttypes.private_flag ->
                Asttypes.virtual_flag ->
                Parsetree.core_type -> Parsetree.class_type_field
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.core_type ->
                Parsetree.core_type -> Parsetree.class_type_field
              val extension :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.extension -> Parsetree.class_type_field
              val attribute :
                ?loc:loc -> Parsetree.attribute -> Parsetree.class_type_field
              val text : Docstrings.text -> Parsetree.class_type_field list
            end
          module Cl :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_expr_desc -> Parsetree.class_expr
              val attr :
                Parsetree.class_expr ->
                Parsetree.attribute -> Parsetree.class_expr
              val constr :
                ?loc:loc ->
                ?attrs:attrs ->
                lid -> Parsetree.core_type list -> Parsetree.class_expr
              val structure :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_structure -> Parsetree.class_expr
              val fun_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.arg_label ->
                Parsetree.expression option ->
                Parsetree.pattern ->
                Parsetree.class_expr -> Parsetree.class_expr
              val apply :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_expr ->
                (Asttypes.arg_label * Parsetree.expression) list ->
                Parsetree.class_expr
              val let_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.rec_flag ->
                Parsetree.value_binding list ->
                Parsetree.class_expr -> Parsetree.class_expr
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.class_expr ->
                Parsetree.class_type -> Parsetree.class_expr
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.class_expr
            end
          module Cf :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                Parsetree.class_field_desc -> Parsetree.class_field
              val attr :
                Parsetree.class_field ->
                Parsetree.attribute -> Parsetree.class_field
              val inherit_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Asttypes.override_flag ->
                Parsetree.class_expr ->
                string option -> Parsetree.class_field
              val val_ :
                ?loc:loc ->
                ?attrs:attrs ->
                str ->
                Asttypes.mutable_flag ->
                Parsetree.class_field_kind -> Parsetree.class_field
              val method_ :
                ?loc:loc ->
                ?attrs:attrs ->
                str ->
                Asttypes.private_flag ->
                Parsetree.class_field_kind -> Parsetree.class_field
              val constraint_ :
                ?loc:loc ->
                ?attrs:attrs ->
                Parsetree.core_type ->
                Parsetree.core_type -> Parsetree.class_field
              val initializer_ :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.expression -> Parsetree.class_field
              val extension :
                ?loc:loc ->
                ?attrs:attrs -> Parsetree.extension -> Parsetree.class_field
              val attribute :
                ?loc:loc -> Parsetree.attribute -> Parsetree.class_field
              val text : Docstrings.text -> Parsetree.class_field list
              val virtual_ :
                Parsetree.core_type -> Parsetree.class_field_kind
              val concrete :
                Asttypes.override_flag ->
                Parsetree.expression -> Parsetree.class_field_kind
            end
          module Ci :
            sig
              val mk :
                ?loc:loc ->
                ?attrs:attrs ->
                ?docs:Docstrings.docs ->
                ?text:Docstrings.text ->
                ?virt:Asttypes.virtual_flag ->
                ?params:(Parsetree.core_type * Asttypes.variance) list ->
                str -> '-> 'Parsetree.class_infos
            end
          module Csig :
            sig
              val mk :
                Parsetree.core_type ->
                Parsetree.class_type_field list -> Parsetree.class_signature
            end
          module Cstr :
            sig
              val mk :
                Parsetree.pattern ->
                Parsetree.class_field list -> Parsetree.class_structure
            end
        end
      module Ast_mapper :
        sig
          type mapper =
            Ast_403.Ast_mapper.mapper = {
            attribute : mapper -> Parsetree.attribute -> Parsetree.attribute;
            attributes :
              mapper -> Parsetree.attribute list -> Parsetree.attribute list;
            case : mapper -> Parsetree.case -> Parsetree.case;
            cases : mapper -> Parsetree.case list -> Parsetree.case list;
            class_declaration :
              mapper ->
              Parsetree.class_declaration -> Parsetree.class_declaration;
            class_description :
              mapper ->
              Parsetree.class_description -> Parsetree.class_description;
            class_expr :
              mapper -> Parsetree.class_expr -> Parsetree.class_expr;
            class_field :
              mapper -> Parsetree.class_field -> Parsetree.class_field;
            class_signature :
              mapper ->
              Parsetree.class_signature -> Parsetree.class_signature;
            class_structure :
              mapper ->
              Parsetree.class_structure -> Parsetree.class_structure;
            class_type :
              mapper -> Parsetree.class_type -> Parsetree.class_type;
            class_type_declaration :
              mapper ->
              Parsetree.class_type_declaration ->
              Parsetree.class_type_declaration;
            class_type_field :
              mapper ->
              Parsetree.class_type_field -> Parsetree.class_type_field;
            constructor_declaration :
              mapper ->
              Parsetree.constructor_declaration ->
              Parsetree.constructor_declaration;
            expr : mapper -> Parsetree.expression -> Parsetree.expression;
            extension : mapper -> Parsetree.extension -> Parsetree.extension;
            extension_constructor :
              mapper ->
              Parsetree.extension_constructor ->
              Parsetree.extension_constructor;
            include_declaration :
              mapper ->
              Parsetree.include_declaration -> Parsetree.include_declaration;
            include_description :
              mapper ->
              Parsetree.include_description -> Parsetree.include_description;
            label_declaration :
              mapper ->
              Parsetree.label_declaration -> Parsetree.label_declaration;
            location : mapper -> Location.t -> Location.t;
            module_binding :
              mapper -> Parsetree.module_binding -> Parsetree.module_binding;
            module_declaration :
              mapper ->
              Parsetree.module_declaration -> Parsetree.module_declaration;
            module_expr :
              mapper -> Parsetree.module_expr -> Parsetree.module_expr;
            module_type :
              mapper -> Parsetree.module_type -> Parsetree.module_type;
            module_type_declaration :
              mapper ->
              Parsetree.module_type_declaration ->
              Parsetree.module_type_declaration;
            open_description :
              mapper ->
              Parsetree.open_description -> Parsetree.open_description;
            pat : mapper -> Parsetree.pattern -> Parsetree.pattern;
            payload : mapper -> Parsetree.payload -> Parsetree.payload;
            signature : mapper -> Parsetree.signature -> Parsetree.signature;
            signature_item :
              mapper -> Parsetree.signature_item -> Parsetree.signature_item;
            structure : mapper -> Parsetree.structure -> Parsetree.structure;
            structure_item :
              mapper -> Parsetree.structure_item -> Parsetree.structure_item;
            typ : mapper -> Parsetree.core_type -> Parsetree.core_type;
            type_declaration :
              mapper ->
              Parsetree.type_declaration -> Parsetree.type_declaration;
            type_extension :
              mapper -> Parsetree.type_extension -> Parsetree.type_extension;
            type_kind : mapper -> Parsetree.type_kind -> Parsetree.type_kind;
            value_binding :
              mapper -> Parsetree.value_binding -> Parsetree.value_binding;
            value_description :
              mapper ->
              Parsetree.value_description -> Parsetree.value_description;
            with_constraint :
              mapper ->
              Parsetree.with_constraint -> Parsetree.with_constraint;
          }
          val default_mapper : mapper
          val map_opt : ('-> 'b) -> 'a option -> 'b option
          val extension_of_error : Location.error -> Parsetree.extension
          val attribute_of_warning :
            Location.t -> string -> Parsetree.attribute
        end
      module Outcometree :
        sig
          type out_ident =
            Ast_403.Outcometree.out_ident =
              Oide_apply of out_ident * out_ident
            | Oide_dot of out_ident * string
            | Oide_ident of string
          type out_attribute =
            Ast_403.Outcometree.out_attribute = {
            oattr_name : string;
          }
          type out_value =
            Ast_403.Outcometree.out_value =
              Oval_array of out_value list
            | Oval_char of char
            | Oval_constr of out_ident * out_value list
            | Oval_ellipsis
            | Oval_float of float
            | Oval_int of int
            | Oval_int32 of int32
            | Oval_int64 of int64
            | Oval_nativeint of nativeint
            | Oval_list of out_value list
            | Oval_printer of (Format.formatter -> unit)
            | Oval_record of (out_ident * out_value) list
            | Oval_string of string
            | Oval_stuff of string
            | Oval_tuple of out_value list
            | Oval_variant of string * out_value option
          type out_type =
            Ast_403.Outcometree.out_type =
              Otyp_abstract
            | Otyp_open
            | Otyp_alias of out_type * string
            | Otyp_arrow of string * out_type * out_type
            | Otyp_class of bool * out_ident * out_type list
            | Otyp_constr of out_ident * out_type list
            | Otyp_manifest of out_type * out_type
            | Otyp_object of (string * out_type) list * bool option
            | Otyp_record of (string * bool * out_type) list
            | Otyp_stuff of string
            | Otyp_sum of (string * out_type list * out_type option) list
            | Otyp_tuple of out_type list
            | Otyp_var of bool * string
            | Otyp_variant of bool * out_variant * bool * string list option
            | Otyp_poly of string list * out_type
            | Otyp_module of string * string list * out_type list
            | Otyp_attribute of out_type * out_attribute
          and out_variant =
            Ast_403.Outcometree.out_variant =
              Ovar_fields of (string * bool * out_type list) list
            | Ovar_name of out_ident * out_type list
          type out_class_type =
            Ast_403.Outcometree.out_class_type =
              Octy_constr of out_ident * out_type list
            | Octy_arrow of string * out_type * out_class_type
            | Octy_signature of out_type option * out_class_sig_item list
          and out_class_sig_item =
            Ast_403.Outcometree.out_class_sig_item =
              Ocsg_constraint of out_type * out_type
            | Ocsg_method of string * bool * bool * out_type
            | Ocsg_value of string * bool * bool * out_type
          type out_module_type =
            Ast_403.Outcometree.out_module_type =
              Omty_abstract
            | Omty_functor of string * out_module_type option *
                out_module_type
            | Omty_ident of out_ident
            | Omty_signature of out_sig_item list
            | Omty_alias of out_ident
          and out_sig_item =
            Ast_403.Outcometree.out_sig_item =
              Osig_class of bool * string * (string * (bool * bool)) list *
                out_class_type * out_rec_status
            | Osig_class_type of bool * string *
                (string * (bool * bool)) list * out_class_type *
                out_rec_status
            | Osig_typext of out_extension_constructor * out_ext_status
            | Osig_modtype of string * out_module_type
            | Osig_module of string * out_module_type * out_rec_status
            | Osig_type of out_type_decl * out_rec_status
            | Osig_value of out_val_decl
            | Osig_ellipsis
          and out_type_decl =
            Ast_403.Outcometree.out_type_decl = {
            otype_name : string;
            otype_params : (string * (bool * bool)) list;
            otype_type : out_type;
            otype_private : Asttypes.private_flag;
            otype_immediate : bool;
            otype_cstrs : (out_type * out_type) list;
          }
          and out_extension_constructor =
            Ast_403.Outcometree.out_extension_constructor = {
            oext_name : string;
            oext_type_name : string;
            oext_type_params : string list;
            oext_args : out_type list;
            oext_ret_type : out_type option;
            oext_private : Asttypes.private_flag;
          }
          and out_type_extension =
            Ast_403.Outcometree.out_type_extension = {
            otyext_name : string;
            otyext_params : string list;
            otyext_constructors :
              (string * out_type list * out_type option) list;
            otyext_private : Asttypes.private_flag;
          }
          and out_val_decl =
            Ast_403.Outcometree.out_val_decl = {
            oval_name : string;
            oval_type : out_type;
            oval_prims : string list;
            oval_attributes : out_attribute list;
          }
          and out_rec_status =
            Ast_403.Outcometree.out_rec_status =
              Orec_not
            | Orec_first
            | Orec_next
          and out_ext_status =
            Ast_403.Outcometree.out_ext_status =
              Oext_first
            | Oext_next
            | Oext_exception
          type out_phrase =
            Ast_403.Outcometree.out_phrase =
              Ophr_eval of out_value * out_type
            | Ophr_signature of (out_sig_item * out_value option) list
            | Ophr_exception of (exn * out_value)
        end
      module Config :
        sig
          val ast_impl_magic_number : string
          val ast_intf_magic_number : string
        end
      val map_signature :
        Ast_mapper.mapper -> Parsetree.signature -> Parsetree.signature
      val map_structure :
        Ast_mapper.mapper -> Parsetree.structure -> Parsetree.structure
      val shallow_identity : Ast_mapper.mapper
      val failing_mapper : Ast_mapper.mapper
      val make_top_mapper :
        signature:(Parsetree.signature -> Parsetree.signature) ->
        structure:(Parsetree.structure -> Parsetree.structure) ->
        Ast_mapper.mapper
    end
  val version : int
  val string_version : string
  type types =
      < case : Ast.Parsetree.case; core_type : Ast.Parsetree.core_type;
        expression : Ast.Parsetree.expression;
        extension_constructor : Ast.Parsetree.extension_constructor;
        mapper : Ast.Ast_mapper.mapper;
        out_class_type : Ast.Outcometree.out_class_type;
        out_module_type : Ast.Outcometree.out_module_type;
        out_phrase : Ast.Outcometree.out_phrase;
        out_sig_item : Ast.Outcometree.out_sig_item;
        out_type : Ast.Outcometree.out_type;
        out_type_extension : Ast.Outcometree.out_type_extension;
        out_value : Ast.Outcometree.out_value;
        pattern : Ast.Parsetree.pattern; signature : Ast.Parsetree.signature;
        structure : Ast.Parsetree.structure;
        toplevel_phrase : Ast.Parsetree.toplevel_phrase;
        type_declaration : Ast.Parsetree.type_declaration;
        type_extension : Ast.Parsetree.type_extension >
      _types
  type _ witnesses += Version : types witnesses
  val migration_info : types migration_info
end