sig
  module type Ast =
    sig
      module Parsetree :
        sig
          type structure
          type signature
          type toplevel_phrase
          type core_type
          type expression
          type pattern
          type case
          type type_declaration
          type type_extension
          type extension_constructor
        end
      module Outcometree :
        sig
          type out_value
          type out_type
          type out_class_type
          type out_module_type
          type out_sig_item
          type out_type_extension
          type out_phrase
        end
      module Ast_mapper : sig type mapper end
      module Config :
        sig
          val ast_impl_magic_number : string
          val ast_intf_magic_number : string
        end
      val shallow_identity : Migrate_parsetree_versions.Ast.Ast_mapper.mapper
      val map_signature :
        Migrate_parsetree_versions.Ast.Ast_mapper.mapper ->
        Migrate_parsetree_versions.Ast.Parsetree.signature ->
        Migrate_parsetree_versions.Ast.Parsetree.signature
      val map_structure :
        Migrate_parsetree_versions.Ast.Ast_mapper.mapper ->
        Migrate_parsetree_versions.Ast.Parsetree.structure ->
        Migrate_parsetree_versions.Ast.Parsetree.structure
      val make_top_mapper :
        signature:(Migrate_parsetree_versions.Ast.Parsetree.signature ->
                   Migrate_parsetree_versions.Ast.Parsetree.signature) ->
        structure:(Migrate_parsetree_versions.Ast.Parsetree.structure ->
                   Migrate_parsetree_versions.Ast.Parsetree.structure) ->
        Migrate_parsetree_versions.Ast.Ast_mapper.mapper
    end
  type 'a _types = 'a
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'q;
        type_declaration : 'r; type_extension : 's >
  type 'a get_structure = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'x; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_signature = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'x; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_toplevel_phrase = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'x;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_core_type = 'x
    constraint 'a =
      < case : 'b; core_type : 'x; expression : 'c;
        extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_expression = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'x;
        extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_pattern = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'x;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_case = 'x
    constraint 'a =
      < case : 'x; core_type : 'b; expression : 'c;
        extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_type_declaration = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'q;
        type_declaration : 'x; type_extension : 'r >
  type 'a get_type_extension = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'q;
        type_declaration : 'r; type_extension : 'x >
  type 'a get_extension_constructor = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'x; mapper : 'e; out_class_type : 'f;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_value = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'x; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_type = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'x; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_class_type = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'x;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_module_type = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'x; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_sig_item = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'x;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_type_extension = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'x; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_out_phrase = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'x; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type 'a get_mapper = 'x
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'x; out_class_type : 'f;
        out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
        out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
        signature : 'n; structure : 'o; toplevel_phrase : 'p;
        type_declaration : 'q; type_extension : 'r >
  type _ witnesses
  type _ migration_info
  module type OCaml_version =
    sig
      module Ast : Ast
      val version : int
      val string_version : string
      type types =
          < case : Migrate_parsetree_versions.Ast.Parsetree.case;
            core_type : Migrate_parsetree_versions.Ast.Parsetree.core_type;
            expression : Migrate_parsetree_versions.Ast.Parsetree.expression;
            extension_constructor : Migrate_parsetree_versions.Ast.Parsetree.extension_constructor;
            mapper : Migrate_parsetree_versions.Ast.Ast_mapper.mapper;
            out_class_type : Migrate_parsetree_versions.Ast.Outcometree.out_class_type;
            out_module_type : Migrate_parsetree_versions.Ast.Outcometree.out_module_type;
            out_phrase : Migrate_parsetree_versions.Ast.Outcometree.out_phrase;
            out_sig_item : Migrate_parsetree_versions.Ast.Outcometree.out_sig_item;
            out_type : Migrate_parsetree_versions.Ast.Outcometree.out_type;
            out_type_extension : Migrate_parsetree_versions.Ast.Outcometree.out_type_extension;
            out_value : Migrate_parsetree_versions.Ast.Outcometree.out_value;
            pattern : Migrate_parsetree_versions.Ast.Parsetree.pattern;
            signature : Migrate_parsetree_versions.Ast.Parsetree.signature;
            structure : Migrate_parsetree_versions.Ast.Parsetree.structure;
            toplevel_phrase : Migrate_parsetree_versions.Ast.Parsetree.toplevel_phrase;
            type_declaration : Migrate_parsetree_versions.Ast.Parsetree.type_declaration;
            type_extension : Migrate_parsetree_versions.Ast.Parsetree.type_extension >
          Migrate_parsetree_versions._types
      type _ witnesses +=
          Version :
            Migrate_parsetree_versions.OCaml_version.types
            Migrate_parsetree_versions.witnesses
      val migration_info :
        Migrate_parsetree_versions.OCaml_version.types
        Migrate_parsetree_versions.migration_info
    end
  type 'a ocaml_version =
      (module Migrate_parsetree_versions.OCaml_version with type Ast.Ast_mapper.mapper = 
       'Migrate_parsetree_versions.get_mapper and type Ast.Outcometree.out_class_type = 
       'Migrate_parsetree_versions.get_out_class_type and type Ast.Outcometree.out_module_type = 
       'Migrate_parsetree_versions.get_out_module_type and type Ast.Outcometree.out_phrase = 
       'Migrate_parsetree_versions.get_out_phrase and type Ast.Outcometree.out_sig_item = 
       'Migrate_parsetree_versions.get_out_sig_item and type Ast.Outcometree.out_type = 
       'Migrate_parsetree_versions.get_out_type and type Ast.Outcometree.out_type_extension = 
       'Migrate_parsetree_versions.get_out_type_extension and type Ast.Outcometree.out_value = 
       'Migrate_parsetree_versions.get_out_value and type Ast.Parsetree.case = 
       'Migrate_parsetree_versions.get_case and type Ast.Parsetree.core_type = 
       'Migrate_parsetree_versions.get_core_type and type Ast.Parsetree.expression = 
       'Migrate_parsetree_versions.get_expression and type Ast.Parsetree.extension_constructor = 
       'Migrate_parsetree_versions.get_extension_constructor and type Ast.Parsetree.pattern = 
       'Migrate_parsetree_versions.get_pattern and type Ast.Parsetree.signature = 
       'Migrate_parsetree_versions.get_signature and type Ast.Parsetree.structure = 
       'Migrate_parsetree_versions.get_structure and type Ast.Parsetree.toplevel_phrase = 
       'Migrate_parsetree_versions.get_toplevel_phrase and type Ast.Parsetree.type_declaration = 
       'Migrate_parsetree_versions.get_type_declaration and type Ast.Parsetree.type_extension = 
       'Migrate_parsetree_versions.get_type_extension)
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'q;
        type_declaration : 'r; type_extension : 's >
  module OCaml_402 :
    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_402.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_402.Asttypes.rec_flag =
                  Nonrecursive
                | Recursive
              type direction_flag =
                Ast_402.Asttypes.direction_flag =
                  Upto
                | Downto
              type private_flag =
                Ast_402.Asttypes.private_flag =
                  Private
                | Public
              type mutable_flag =
                Ast_402.Asttypes.mutable_flag =
                  Immutable
                | Mutable
              type virtual_flag =
                Ast_402.Asttypes.virtual_flag =
                  Virtual
                | Concrete
              type override_flag =
                Ast_402.Asttypes.override_flag =
                  Override
                | Fresh
              type closed_flag = Ast_402.Asttypes.closed_flag = Closed | Open
              type label = string
              type 'a loc = 'Location.loc = { txt : 'a; loc : Location.t; }
              type variance =
                Ast_402.Asttypes.variance =
                  Covariant
                | Contravariant
                | Invariant
            end
          module Parsetree :
            sig
              type attribute = string Asttypes.loc * payload
              and extension = string Asttypes.loc * payload
              and attributes = attribute list
              and payload =
                Ast_402.Parsetree.payload =
                  PStr of structure
                | PTyp of core_type
                | PPat of pattern * expression option
              and core_type =
                Ast_402.Parsetree.core_type = {
                ptyp_desc : core_type_desc;
                ptyp_loc : Location.t;
                ptyp_attributes : attributes;
              }
              and core_type_desc =
                Ast_402.Parsetree.core_type_desc =
                  Ptyp_any
                | Ptyp_var of string
                | Ptyp_arrow of Asttypes.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_402.Parsetree.row_field =
                  Rtag of Asttypes.label * attributes * bool * core_type list
                | Rinherit of core_type
              and pattern =
                Ast_402.Parsetree.pattern = {
                ppat_desc : pattern_desc;
                ppat_loc : Location.t;
                ppat_attributes : attributes;
              }
              and pattern_desc =
                Ast_402.Parsetree.pattern_desc =
                  Ppat_any
                | Ppat_var of string Asttypes.loc
                | Ppat_alias of pattern * string Asttypes.loc
                | Ppat_constant of Asttypes.constant
                | Ppat_interval of Asttypes.constant * Asttypes.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_402.Parsetree.expression = {
                pexp_desc : expression_desc;
                pexp_loc : Location.t;
                pexp_attributes : attributes;
              }
              and expression_desc =
                Ast_402.Parsetree.expression_desc =
                  Pexp_ident of Longident.t Asttypes.loc
                | Pexp_constant of Asttypes.constant
                | Pexp_let of Asttypes.rec_flag * value_binding list *
                    expression
                | Pexp_function of case list
                | Pexp_fun of Asttypes.label * expression option * pattern *
                    expression
                | Pexp_apply of expression *
                    (Asttypes.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
              and case =
                Ast_402.Parsetree.case = {
                pc_lhs : pattern;
                pc_guard : expression option;
                pc_rhs : expression;
              }
              and value_description =
                Ast_402.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_402.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_402.Parsetree.type_kind =
                  Ptype_abstract
                | Ptype_variant of constructor_declaration list
                | Ptype_record of label_declaration list
                | Ptype_open
              and label_declaration =
                Ast_402.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_402.Parsetree.constructor_declaration = {
                pcd_name : string Asttypes.loc;
                pcd_args : core_type list;
                pcd_res : core_type option;
                pcd_loc : Location.t;
                pcd_attributes : attributes;
              }
              and type_extension =
                Ast_402.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_402.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_402.Parsetree.extension_constructor_kind =
                  Pext_decl of core_type list * core_type option
                | Pext_rebind of Longident.t Asttypes.loc
              and class_type =
                Ast_402.Parsetree.class_type = {
                pcty_desc : class_type_desc;
                pcty_loc : Location.t;
                pcty_attributes : attributes;
              }
              and class_type_desc =
                Ast_402.Parsetree.class_type_desc =
                  Pcty_constr of Longident.t Asttypes.loc * core_type list
                | Pcty_signature of class_signature
                | Pcty_arrow of Asttypes.label * core_type * class_type
                | Pcty_extension of extension
              and class_signature =
                Ast_402.Parsetree.class_signature = {
                pcsig_self : core_type;
                pcsig_fields : class_type_field list;
              }
              and class_type_field =
                Ast_402.Parsetree.class_type_field = {
                pctf_desc : class_type_field_desc;
                pctf_loc : Location.t;
                pctf_attributes : attributes;
              }
              and class_type_field_desc =
                Ast_402.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_402.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_402.Parsetree.class_expr = {
                pcl_desc : class_expr_desc;
                pcl_loc : Location.t;
                pcl_attributes : attributes;
              }
              and class_expr_desc =
                Ast_402.Parsetree.class_expr_desc =
                  Pcl_constr of Longident.t Asttypes.loc * core_type list
                | Pcl_structure of class_structure
                | Pcl_fun of Asttypes.label * expression option * pattern *
                    class_expr
                | Pcl_apply of class_expr *
                    (Asttypes.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_402.Parsetree.class_structure = {
                pcstr_self : pattern;
                pcstr_fields : class_field list;
              }
              and class_field =
                Ast_402.Parsetree.class_field = {
                pcf_desc : class_field_desc;
                pcf_loc : Location.t;
                pcf_attributes : attributes;
              }
              and class_field_desc =
                Ast_402.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_402.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_402.Parsetree.module_type = {
                pmty_desc : module_type_desc;
                pmty_loc : Location.t;
                pmty_attributes : attributes;
              }
              and module_type_desc =
                Ast_402.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_402.Parsetree.signature_item = {
                psig_desc : signature_item_desc;
                psig_loc : Location.t;
              }
              and signature_item_desc =
                Ast_402.Parsetree.signature_item_desc =
                  Psig_value of value_description
                | Psig_type of 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_402.Parsetree.module_declaration = {
                pmd_name : string Asttypes.loc;
                pmd_type : module_type;
                pmd_attributes : attributes;
                pmd_loc : Location.t;
              }
              and module_type_declaration =
                Ast_402.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_402.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_402.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_402.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_402.Parsetree.module_expr = {
                pmod_desc : module_expr_desc;
                pmod_loc : Location.t;
                pmod_attributes : attributes;
              }
              and module_expr_desc =
                Ast_402.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_402.Parsetree.structure_item = {
                pstr_desc : structure_item_desc;
                pstr_loc : Location.t;
              }
              and structure_item_desc =
                Ast_402.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 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_402.Parsetree.value_binding = {
                pvb_pat : pattern;
                pvb_expr : expression;
                pvb_attributes : attributes;
                pvb_loc : Location.t;
              }
              and module_binding =
                Ast_402.Parsetree.module_binding = {
                pmb_name : string Asttypes.loc;
                pmb_expr : module_expr;
                pmb_attributes : attributes;
                pmb_loc : Location.t;
              }
              type toplevel_phrase =
                Ast_402.Parsetree.toplevel_phrase =
                  Ptop_def of structure
                | Ptop_dir of string * directive_argument
              and directive_argument =
                Ast_402.Parsetree.directive_argument =
                  Pdir_none
                | Pdir_string of string
                | Pdir_int of int
                | Pdir_ident of Longident.t
                | Pdir_bool of bool
            end
          module Docstrings :
            sig
              type docstring = Ast_402.Docstrings.docstring
              val docstring : string -> Location.t -> docstring
              val docstring_body : docstring -> string
              val docstring_loc : docstring -> Location.t
              type docs =
                Ast_402.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 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.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 -> Asttypes.constant -> Parsetree.pattern
                  val interval :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Asttypes.constant ->
                    Asttypes.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 -> Asttypes.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.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.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 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.core_type list ->
                    ?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.core_type list ->
                    ?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 ->
                    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 ->
                    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.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.label ->
                    Parsetree.expression option ->
                    Parsetree.pattern ->
                    Parsetree.class_expr -> Parsetree.class_expr
                  val apply :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Parsetree.class_expr ->
                    (Asttypes.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_402.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_402.Outcometree.out_ident =
                  Oide_apply of out_ident * out_ident
                | Oide_dot of out_ident * string
                | Oide_ident of string
              type out_value =
                Ast_402.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_402.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
              and out_variant =
                Ast_402.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_402.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_402.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_402.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_402.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 string * out_type * string list
              and out_type_decl =
                Ast_402.Outcometree.out_type_decl = {
                otype_name : string;
                otype_params : (string * (bool * bool)) list;
                otype_type : out_type;
                otype_private : Asttypes.private_flag;
                otype_cstrs : (out_type * out_type) list;
              }
              and out_extension_constructor =
                Ast_402.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_402.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_rec_status =
                Ast_402.Outcometree.out_rec_status =
                  Orec_not
                | Orec_first
                | Orec_next
              and out_ext_status =
                Ast_402.Outcometree.out_ext_status =
                  Oext_first
                | Oext_next
                | Oext_exception
              type out_phrase =
                Ast_402.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
  val ocaml_402 :
    Migrate_parsetree_versions.OCaml_402.types
    Migrate_parsetree_versions.ocaml_version
  module OCaml_403 :
    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
  val ocaml_403 :
    Migrate_parsetree_versions.OCaml_403.types
    Migrate_parsetree_versions.ocaml_version
  module OCaml_404 :
    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_404.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_404.Asttypes.rec_flag =
                  Nonrecursive
                | Recursive
              type direction_flag =
                Ast_404.Asttypes.direction_flag =
                  Upto
                | Downto
              type private_flag =
                Ast_404.Asttypes.private_flag =
                  Private
                | Public
              type mutable_flag =
                Ast_404.Asttypes.mutable_flag =
                  Immutable
                | Mutable
              type virtual_flag =
                Ast_404.Asttypes.virtual_flag =
                  Virtual
                | Concrete
              type override_flag =
                Ast_404.Asttypes.override_flag =
                  Override
                | Fresh
              type closed_flag = Ast_404.Asttypes.closed_flag = Closed | Open
              type label = string
              type arg_label =
                Ast_404.Asttypes.arg_label =
                  Nolabel
                | Labelled of string
                | Optional of string
              type 'a loc = 'Location.loc = { txt : 'a; loc : Location.t; }
              type variance =
                Ast_404.Asttypes.variance =
                  Covariant
                | Contravariant
                | Invariant
            end
          module Parsetree :
            sig
              type constant =
                Ast_404.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_404.Parsetree.payload =
                  PStr of structure
                | PSig of signature
                | PTyp of core_type
                | PPat of pattern * expression option
              and core_type =
                Ast_404.Parsetree.core_type = {
                ptyp_desc : core_type_desc;
                ptyp_loc : Location.t;
                ptyp_attributes : attributes;
              }
              and core_type_desc =
                Ast_404.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_404.Parsetree.row_field =
                  Rtag of Asttypes.label * attributes * bool * core_type list
                | Rinherit of core_type
              and pattern =
                Ast_404.Parsetree.pattern = {
                ppat_desc : pattern_desc;
                ppat_loc : Location.t;
                ppat_attributes : attributes;
              }
              and pattern_desc =
                Ast_404.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
                | Ppat_open of Longident.t Asttypes.loc * pattern
              and expression =
                Ast_404.Parsetree.expression = {
                pexp_desc : expression_desc;
                pexp_loc : Location.t;
                pexp_attributes : attributes;
              }
              and expression_desc =
                Ast_404.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_letexception of extension_constructor * 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_404.Parsetree.case = {
                pc_lhs : pattern;
                pc_guard : expression option;
                pc_rhs : expression;
              }
              and value_description =
                Ast_404.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_404.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_404.Parsetree.type_kind =
                  Ptype_abstract
                | Ptype_variant of constructor_declaration list
                | Ptype_record of label_declaration list
                | Ptype_open
              and label_declaration =
                Ast_404.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_404.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_404.Parsetree.constructor_arguments =
                  Pcstr_tuple of core_type list
                | Pcstr_record of label_declaration list
              and type_extension =
                Ast_404.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_404.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_404.Parsetree.extension_constructor_kind =
                  Pext_decl of constructor_arguments * core_type option
                | Pext_rebind of Longident.t Asttypes.loc
              and class_type =
                Ast_404.Parsetree.class_type = {
                pcty_desc : class_type_desc;
                pcty_loc : Location.t;
                pcty_attributes : attributes;
              }
              and class_type_desc =
                Ast_404.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_404.Parsetree.class_signature = {
                pcsig_self : core_type;
                pcsig_fields : class_type_field list;
              }
              and class_type_field =
                Ast_404.Parsetree.class_type_field = {
                pctf_desc : class_type_field_desc;
                pctf_loc : Location.t;
                pctf_attributes : attributes;
              }
              and class_type_field_desc =
                Ast_404.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_404.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_404.Parsetree.class_expr = {
                pcl_desc : class_expr_desc;
                pcl_loc : Location.t;
                pcl_attributes : attributes;
              }
              and class_expr_desc =
                Ast_404.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_404.Parsetree.class_structure = {
                pcstr_self : pattern;
                pcstr_fields : class_field list;
              }
              and class_field =
                Ast_404.Parsetree.class_field = {
                pcf_desc : class_field_desc;
                pcf_loc : Location.t;
                pcf_attributes : attributes;
              }
              and class_field_desc =
                Ast_404.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_404.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_404.Parsetree.module_type = {
                pmty_desc : module_type_desc;
                pmty_loc : Location.t;
                pmty_attributes : attributes;
              }
              and module_type_desc =
                Ast_404.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_404.Parsetree.signature_item = {
                psig_desc : signature_item_desc;
                psig_loc : Location.t;
              }
              and signature_item_desc =
                Ast_404.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_404.Parsetree.module_declaration = {
                pmd_name : string Asttypes.loc;
                pmd_type : module_type;
                pmd_attributes : attributes;
                pmd_loc : Location.t;
              }
              and module_type_declaration =
                Ast_404.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_404.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_404.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_404.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_404.Parsetree.module_expr = {
                pmod_desc : module_expr_desc;
                pmod_loc : Location.t;
                pmod_attributes : attributes;
              }
              and module_expr_desc =
                Ast_404.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_404.Parsetree.structure_item = {
                pstr_desc : structure_item_desc;
                pstr_loc : Location.t;
              }
              and structure_item_desc =
                Ast_404.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_404.Parsetree.value_binding = {
                pvb_pat : pattern;
                pvb_expr : expression;
                pvb_attributes : attributes;
                pvb_loc : Location.t;
              }
              and module_binding =
                Ast_404.Parsetree.module_binding = {
                pmb_name : string Asttypes.loc;
                pmb_expr : module_expr;
                pmb_attributes : attributes;
                pmb_loc : Location.t;
              }
              type toplevel_phrase =
                Ast_404.Parsetree.toplevel_phrase =
                  Ptop_def of structure
                | Ptop_dir of string * directive_argument
              and directive_argument =
                Ast_404.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_404.Docstrings.docstring
              val docstring : string -> Location.t -> docstring
              val docstring_body : docstring -> string
              val docstring_loc : docstring -> Location.t
              type docs =
                Ast_404.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 open_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    lid -> Parsetree.pattern -> 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 letexception :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Parsetree.extension_constructor ->
                    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_404.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_404.Outcometree.out_ident =
                  Oide_apply of out_ident * out_ident
                | Oide_dot of out_ident * string
                | Oide_ident of string
              type out_attribute =
                Ast_404.Outcometree.out_attribute = {
                oattr_name : string;
              }
              type out_value =
                Ast_404.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_404.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_404.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_404.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_404.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_404.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_404.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_404.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_unboxed : bool;
                otype_cstrs : (out_type * out_type) list;
              }
              and out_extension_constructor =
                Ast_404.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_404.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_404.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_404.Outcometree.out_rec_status =
                  Orec_not
                | Orec_first
                | Orec_next
              and out_ext_status =
                Ast_404.Outcometree.out_ext_status =
                  Oext_first
                | Oext_next
                | Oext_exception
              type out_phrase =
                Ast_404.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
  val ocaml_404 :
    Migrate_parsetree_versions.OCaml_404.types
    Migrate_parsetree_versions.ocaml_version
  module OCaml_405 :
    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 =
                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 = Asttypes.rec_flag = Nonrecursive | Recursive
              type direction_flag = Asttypes.direction_flag = Upto | Downto
              type private_flag = Asttypes.private_flag = Private | Public
              type mutable_flag = Asttypes.mutable_flag = Immutable | Mutable
              type virtual_flag = Asttypes.virtual_flag = Virtual | Concrete
              type override_flag = Asttypes.override_flag = Override | Fresh
              type closed_flag = Asttypes.closed_flag = Closed | Open
              type label = string
              type arg_label =
                Asttypes.arg_label =
                  Nolabel
                | Labelled of string
                | Optional of string
              type 'a loc = 'Location.loc = { txt : 'a; loc : Location.t; }
              type variance =
                Asttypes.variance =
                  Covariant
                | Contravariant
                | Invariant
            end
          module Parsetree :
            sig
              type constant =
                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 =
                Parsetree.payload =
                  PStr of structure
                | PSig of signature
                | PTyp of core_type
                | PPat of pattern * expression option
              and core_type =
                Parsetree.core_type = {
                ptyp_desc : core_type_desc;
                ptyp_loc : Location.t;
                ptyp_attributes : attributes;
              }
              and core_type_desc =
                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 Asttypes.loc * 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 Asttypes.loc 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 =
                Parsetree.row_field =
                  Rtag of Asttypes.label * attributes * bool * core_type list
                | Rinherit of core_type
              and pattern =
                Parsetree.pattern = {
                ppat_desc : pattern_desc;
                ppat_loc : Location.t;
                ppat_attributes : attributes;
              }
              and pattern_desc =
                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
                | Ppat_open of Longident.t Asttypes.loc * pattern
              and expression =
                Parsetree.expression = {
                pexp_desc : expression_desc;
                pexp_loc : Location.t;
                pexp_attributes : attributes;
              }
              and expression_desc =
                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 Asttypes.loc
                | 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_letexception of extension_constructor * 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 Asttypes.loc * 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 =
                Parsetree.case = {
                pc_lhs : pattern;
                pc_guard : expression option;
                pc_rhs : expression;
              }
              and value_description =
                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 =
                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 =
                Parsetree.type_kind =
                  Ptype_abstract
                | Ptype_variant of constructor_declaration list
                | Ptype_record of label_declaration list
                | Ptype_open
              and label_declaration =
                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 =
                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 =
                Parsetree.constructor_arguments =
                  Pcstr_tuple of core_type list
                | Pcstr_record of label_declaration list
              and type_extension =
                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 =
                Parsetree.extension_constructor = {
                pext_name : string Asttypes.loc;
                pext_kind : extension_constructor_kind;
                pext_loc : Location.t;
                pext_attributes : attributes;
              }
              and extension_constructor_kind =
                Parsetree.extension_constructor_kind =
                  Pext_decl of constructor_arguments * core_type option
                | Pext_rebind of Longident.t Asttypes.loc
              and class_type =
                Parsetree.class_type = {
                pcty_desc : class_type_desc;
                pcty_loc : Location.t;
                pcty_attributes : attributes;
              }
              and class_type_desc =
                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 =
                Parsetree.class_signature = {
                pcsig_self : core_type;
                pcsig_fields : class_type_field list;
              }
              and class_type_field =
                Parsetree.class_type_field = {
                pctf_desc : class_type_field_desc;
                pctf_loc : Location.t;
                pctf_attributes : attributes;
              }
              and class_type_field_desc =
                Parsetree.class_type_field_desc =
                  Pctf_inherit of class_type
                | Pctf_val of
                    (string Asttypes.loc * Asttypes.mutable_flag *
                     Asttypes.virtual_flag * core_type)
                | Pctf_method of
                    (string Asttypes.loc * 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 =
                '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 =
                Parsetree.class_expr = {
                pcl_desc : class_expr_desc;
                pcl_loc : Location.t;
                pcl_attributes : attributes;
              }
              and class_expr_desc =
                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 =
                Parsetree.class_structure = {
                pcstr_self : pattern;
                pcstr_fields : class_field list;
              }
              and class_field =
                Parsetree.class_field = {
                pcf_desc : class_field_desc;
                pcf_loc : Location.t;
                pcf_attributes : attributes;
              }
              and class_field_desc =
                Parsetree.class_field_desc =
                  Pcf_inherit of Asttypes.override_flag * class_expr *
                    string Asttypes.loc 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 =
                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 =
                Parsetree.module_type = {
                pmty_desc : module_type_desc;
                pmty_loc : Location.t;
                pmty_attributes : attributes;
              }
              and module_type_desc =
                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 =
                Parsetree.signature_item = {
                psig_desc : signature_item_desc;
                psig_loc : Location.t;
              }
              and signature_item_desc =
                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 =
                Parsetree.module_declaration = {
                pmd_name : string Asttypes.loc;
                pmd_type : module_type;
                pmd_attributes : attributes;
                pmd_loc : Location.t;
              }
              and module_type_declaration =
                Parsetree.module_type_declaration = {
                pmtd_name : string Asttypes.loc;
                pmtd_type : module_type option;
                pmtd_attributes : attributes;
                pmtd_loc : Location.t;
              }
              and open_description =
                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 =
                '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 =
                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 =
                Parsetree.module_expr = {
                pmod_desc : module_expr_desc;
                pmod_loc : Location.t;
                pmod_attributes : attributes;
              }
              and module_expr_desc =
                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 =
                Parsetree.structure_item = {
                pstr_desc : structure_item_desc;
                pstr_loc : Location.t;
              }
              and structure_item_desc =
                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 =
                Parsetree.value_binding = {
                pvb_pat : pattern;
                pvb_expr : expression;
                pvb_attributes : attributes;
                pvb_loc : Location.t;
              }
              and module_binding =
                Parsetree.module_binding = {
                pmb_name : string Asttypes.loc;
                pmb_expr : module_expr;
                pmb_attributes : attributes;
                pmb_loc : Location.t;
              }
              type toplevel_phrase =
                Parsetree.toplevel_phrase =
                  Ptop_def of structure
                | Ptop_dir of string * directive_argument
              and directive_argument =
                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_405.Docstrings.docstring
              val docstring : string -> Location.t -> docstring
              val docstring_body : docstring -> string
              val docstring_loc : docstring -> Location.t
              type docs =
                Ast_405.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 ->
                    (str * 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 ->
                    str 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
                  val varify_constructors :
                    str list -> 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 open_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    lid -> Parsetree.pattern -> 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 -> str -> 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 letexception :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Parsetree.extension_constructor ->
                    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 ->
                    str -> 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 ->
                    str ->
                    Asttypes.mutable_flag ->
                    Asttypes.virtual_flag ->
                    Parsetree.core_type -> Parsetree.class_type_field
                  val method_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    str ->
                    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 ->
                    str 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_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 =
                Outcometree.out_ident =
                  Oide_apply of out_ident * out_ident
                | Oide_dot of out_ident * string
                | Oide_ident of string
              type out_attribute =
                Outcometree.out_attribute = {
                oattr_name : string;
              }
              type out_value =
                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 =
                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 =
                Outcometree.out_variant =
                  Ovar_fields of (string * bool * out_type list) list
                | Ovar_typ of out_type
              type out_class_type =
                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 =
                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 =
                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 =
                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 =
                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_unboxed : bool;
                otype_cstrs : (out_type * out_type) list;
              }
              and out_extension_constructor =
                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 =
                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 =
                Outcometree.out_val_decl = {
                oval_name : string;
                oval_type : out_type;
                oval_prims : string list;
                oval_attributes : out_attribute list;
              }
              and out_rec_status =
                Outcometree.out_rec_status =
                  Orec_not
                | Orec_first
                | Orec_next
              and out_ext_status =
                Outcometree.out_ext_status =
                  Oext_first
                | Oext_next
                | Oext_exception
              type out_phrase =
                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
  val ocaml_405 :
    Migrate_parsetree_versions.OCaml_405.types
    Migrate_parsetree_versions.ocaml_version
  module OCaml_406 :
    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_406.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_406.Asttypes.rec_flag =
                  Nonrecursive
                | Recursive
              type direction_flag =
                Ast_406.Asttypes.direction_flag =
                  Upto
                | Downto
              type private_flag =
                Ast_406.Asttypes.private_flag =
                  Private
                | Public
              type mutable_flag =
                Ast_406.Asttypes.mutable_flag =
                  Immutable
                | Mutable
              type virtual_flag =
                Ast_406.Asttypes.virtual_flag =
                  Virtual
                | Concrete
              type override_flag =
                Ast_406.Asttypes.override_flag =
                  Override
                | Fresh
              type closed_flag = Ast_406.Asttypes.closed_flag = Closed | Open
              type label = string
              type arg_label =
                Ast_406.Asttypes.arg_label =
                  Nolabel
                | Labelled of string
                | Optional of string
              type 'a loc = 'Location.loc = { txt : 'a; loc : Location.t; }
              type variance =
                Ast_406.Asttypes.variance =
                  Covariant
                | Contravariant
                | Invariant
            end
          module Parsetree :
            sig
              type constant =
                Ast_406.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_406.Parsetree.payload =
                  PStr of structure
                | PSig of signature
                | PTyp of core_type
                | PPat of pattern * expression option
              and core_type =
                Ast_406.Parsetree.core_type = {
                ptyp_desc : core_type_desc;
                ptyp_loc : Location.t;
                ptyp_attributes : attributes;
              }
              and core_type_desc =
                Ast_406.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 object_field 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 Asttypes.loc 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_406.Parsetree.row_field =
                  Rtag of Asttypes.label Asttypes.loc * attributes * 
                    bool * core_type list
                | Rinherit of core_type
              and object_field =
                Ast_406.Parsetree.object_field =
                  Otag of Asttypes.label Asttypes.loc * attributes *
                    core_type
                | Oinherit of core_type
              and pattern =
                Ast_406.Parsetree.pattern = {
                ppat_desc : pattern_desc;
                ppat_loc : Location.t;
                ppat_attributes : attributes;
              }
              and pattern_desc =
                Ast_406.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
                | Ppat_open of Longident.t Asttypes.loc * pattern
              and expression =
                Ast_406.Parsetree.expression = {
                pexp_desc : expression_desc;
                pexp_loc : Location.t;
                pexp_attributes : attributes;
              }
              and expression_desc =
                Ast_406.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 * Asttypes.label Asttypes.loc
                | Pexp_new of Longident.t Asttypes.loc
                | Pexp_setinstvar of Asttypes.label Asttypes.loc * expression
                | Pexp_override of
                    (Asttypes.label Asttypes.loc * expression) list
                | Pexp_letmodule of string Asttypes.loc * module_expr *
                    expression
                | Pexp_letexception of extension_constructor * 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 Asttypes.loc * 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_406.Parsetree.case = {
                pc_lhs : pattern;
                pc_guard : expression option;
                pc_rhs : expression;
              }
              and value_description =
                Ast_406.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_406.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_406.Parsetree.type_kind =
                  Ptype_abstract
                | Ptype_variant of constructor_declaration list
                | Ptype_record of label_declaration list
                | Ptype_open
              and label_declaration =
                Ast_406.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_406.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_406.Parsetree.constructor_arguments =
                  Pcstr_tuple of core_type list
                | Pcstr_record of label_declaration list
              and type_extension =
                Ast_406.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_406.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_406.Parsetree.extension_constructor_kind =
                  Pext_decl of constructor_arguments * core_type option
                | Pext_rebind of Longident.t Asttypes.loc
              and class_type =
                Ast_406.Parsetree.class_type = {
                pcty_desc : class_type_desc;
                pcty_loc : Location.t;
                pcty_attributes : attributes;
              }
              and class_type_desc =
                Ast_406.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
                | Pcty_open of Asttypes.override_flag *
                    Longident.t Asttypes.loc * class_type
              and class_signature =
                Ast_406.Parsetree.class_signature = {
                pcsig_self : core_type;
                pcsig_fields : class_type_field list;
              }
              and class_type_field =
                Ast_406.Parsetree.class_type_field = {
                pctf_desc : class_type_field_desc;
                pctf_loc : Location.t;
                pctf_attributes : attributes;
              }
              and class_type_field_desc =
                Ast_406.Parsetree.class_type_field_desc =
                  Pctf_inherit of class_type
                | Pctf_val of
                    (Asttypes.label Asttypes.loc * Asttypes.mutable_flag *
                     Asttypes.virtual_flag * core_type)
                | Pctf_method of
                    (Asttypes.label Asttypes.loc * 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_406.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_406.Parsetree.class_expr = {
                pcl_desc : class_expr_desc;
                pcl_loc : Location.t;
                pcl_attributes : attributes;
              }
              and class_expr_desc =
                Ast_406.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
                | Pcl_open of Asttypes.override_flag *
                    Longident.t Asttypes.loc * class_expr
              and class_structure =
                Ast_406.Parsetree.class_structure = {
                pcstr_self : pattern;
                pcstr_fields : class_field list;
              }
              and class_field =
                Ast_406.Parsetree.class_field = {
                pcf_desc : class_field_desc;
                pcf_loc : Location.t;
                pcf_attributes : attributes;
              }
              and class_field_desc =
                Ast_406.Parsetree.class_field_desc =
                  Pcf_inherit of Asttypes.override_flag * class_expr *
                    string Asttypes.loc option
                | Pcf_val of
                    (Asttypes.label Asttypes.loc * Asttypes.mutable_flag *
                     class_field_kind)
                | Pcf_method of
                    (Asttypes.label 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_406.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_406.Parsetree.module_type = {
                pmty_desc : module_type_desc;
                pmty_loc : Location.t;
                pmty_attributes : attributes;
              }
              and module_type_desc =
                Ast_406.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_406.Parsetree.signature_item = {
                psig_desc : signature_item_desc;
                psig_loc : Location.t;
              }
              and signature_item_desc =
                Ast_406.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_406.Parsetree.module_declaration = {
                pmd_name : string Asttypes.loc;
                pmd_type : module_type;
                pmd_attributes : attributes;
                pmd_loc : Location.t;
              }
              and module_type_declaration =
                Ast_406.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_406.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_406.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_406.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 Longident.t Asttypes.loc *
                    type_declaration
                | Pwith_modsubst of Longident.t Asttypes.loc *
                    Longident.t Asttypes.loc
              and module_expr =
                Ast_406.Parsetree.module_expr = {
                pmod_desc : module_expr_desc;
                pmod_loc : Location.t;
                pmod_attributes : attributes;
              }
              and module_expr_desc =
                Ast_406.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_406.Parsetree.structure_item = {
                pstr_desc : structure_item_desc;
                pstr_loc : Location.t;
              }
              and structure_item_desc =
                Ast_406.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_406.Parsetree.value_binding = {
                pvb_pat : pattern;
                pvb_expr : expression;
                pvb_attributes : attributes;
                pvb_loc : Location.t;
              }
              and module_binding =
                Ast_406.Parsetree.module_binding = {
                pmb_name : string Asttypes.loc;
                pmb_expr : module_expr;
                pmb_attributes : attributes;
                pmb_loc : Location.t;
              }
              type toplevel_phrase =
                Ast_406.Parsetree.toplevel_phrase =
                  Ptop_def of structure
                | Ptop_dir of string * directive_argument
              and directive_argument =
                Ast_406.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_406.Docstrings.docstring
              val docstring : string -> Location.t -> docstring
              val docstring_body : docstring -> string
              val docstring_loc : docstring -> Location.t
              type docs =
                Ast_406.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 ->
                    Parsetree.object_field 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 ->
                    str 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
                  val varify_constructors :
                    str list -> 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 open_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    lid -> Parsetree.pattern -> 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 -> str -> 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 letexception :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Parsetree.extension_constructor ->
                    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 ->
                    str -> 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
                  val open_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Asttypes.override_flag ->
                    lid -> Parsetree.class_type -> 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 ->
                    str ->
                    Asttypes.mutable_flag ->
                    Asttypes.virtual_flag ->
                    Parsetree.core_type -> Parsetree.class_type_field
                  val method_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    str ->
                    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
                  val open_ :
                    ?loc:loc ->
                    ?attrs:attrs ->
                    Asttypes.override_flag ->
                    lid -> Parsetree.class_expr -> 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 ->
                    str 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_406.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_406.Outcometree.out_ident =
                  Oide_apply of out_ident * out_ident
                | Oide_dot of out_ident * string
                | Oide_ident of string
              type out_string =
                Ast_406.Outcometree.out_string =
                  Ostr_string
                | Ostr_bytes
              type out_attribute =
                Ast_406.Outcometree.out_attribute = {
                oattr_name : string;
              }
              type out_value =
                Ast_406.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 * int * out_string
                | Oval_stuff of string
                | Oval_tuple of out_value list
                | Oval_variant of string * out_value option
              type out_type =
                Ast_406.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_406.Outcometree.out_variant =
                  Ovar_fields of (string * bool * out_type list) list
                | Ovar_typ of out_type
              type out_class_type =
                Ast_406.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_406.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_406.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_406.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_406.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_unboxed : bool;
                otype_cstrs : (out_type * out_type) list;
              }
              and out_extension_constructor =
                Ast_406.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_406.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_406.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_406.Outcometree.out_rec_status =
                  Orec_not
                | Orec_first
                | Orec_next
              and out_ext_status =
                Ast_406.Outcometree.out_ext_status =
                  Oext_first
                | Oext_next
                | Oext_exception
              type out_phrase =
                Ast_406.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
  val ocaml_406 :
    Migrate_parsetree_versions.OCaml_406.types
    Migrate_parsetree_versions.ocaml_version
  module OCaml_current = OCaml_405
  val ocaml_current :
    OCaml_current.types Migrate_parsetree_versions.ocaml_version
  val all_versions : (module Migrate_parsetree_versions.OCaml_version) list
  type ('a, 'b) type_comparison =
      Lt : ('a, 'b) Migrate_parsetree_versions.type_comparison
    | Eq : ('a, 'a) Migrate_parsetree_versions.type_comparison
    | Gt : ('a, 'b) Migrate_parsetree_versions.type_comparison
  val compare_ocaml_version :
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
      mapper : 'w; out_class_type : 'x; out_module_type : 'y;
      out_phrase : 'z; out_sig_item : 'a1; out_type : 'b1;
      out_type_extension : 'c1; out_value : 'd1; pattern : 'e1;
      signature : 'f1; structure : 'g1; toplevel_phrase : 'h1;
      type_declaration : 'i1; type_extension : 'j1 >
    Migrate_parsetree_versions.ocaml_version ->
    (< case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >,
     < case : 's; core_type : 't; expression : 'u;
       extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
       out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
       out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
       pattern : 'e1; signature : 'f1; structure : 'g1;
       toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
    Migrate_parsetree_versions.type_comparison
  type ('a, 'b) migration_functions = {
    copy_structure :
      'Migrate_parsetree_versions.get_structure ->
      'Migrate_parsetree_versions.get_structure;
    copy_signature :
      'Migrate_parsetree_versions.get_signature ->
      'Migrate_parsetree_versions.get_signature;
    copy_toplevel_phrase :
      'Migrate_parsetree_versions.get_toplevel_phrase ->
      'Migrate_parsetree_versions.get_toplevel_phrase;
    copy_core_type :
      'Migrate_parsetree_versions.get_core_type ->
      'Migrate_parsetree_versions.get_core_type;
    copy_expression :
      'Migrate_parsetree_versions.get_expression ->
      'Migrate_parsetree_versions.get_expression;
    copy_pattern :
      'Migrate_parsetree_versions.get_pattern ->
      'Migrate_parsetree_versions.get_pattern;
    copy_case :
      'Migrate_parsetree_versions.get_case ->
      'Migrate_parsetree_versions.get_case;
    copy_type_declaration :
      'Migrate_parsetree_versions.get_type_declaration ->
      'Migrate_parsetree_versions.get_type_declaration;
    copy_type_extension :
      'Migrate_parsetree_versions.get_type_extension ->
      'Migrate_parsetree_versions.get_type_extension;
    copy_extension_constructor :
      'Migrate_parsetree_versions.get_extension_constructor ->
      'Migrate_parsetree_versions.get_extension_constructor;
    copy_out_value :
      'Migrate_parsetree_versions.get_out_value ->
      'Migrate_parsetree_versions.get_out_value;
    copy_out_type :
      'Migrate_parsetree_versions.get_out_type ->
      'Migrate_parsetree_versions.get_out_type;
    copy_out_class_type :
      'Migrate_parsetree_versions.get_out_class_type ->
      'Migrate_parsetree_versions.get_out_class_type;
    copy_out_module_type :
      'Migrate_parsetree_versions.get_out_module_type ->
      'Migrate_parsetree_versions.get_out_module_type;
    copy_out_sig_item :
      'Migrate_parsetree_versions.get_out_sig_item ->
      'Migrate_parsetree_versions.get_out_sig_item;
    copy_out_type_extension :
      'Migrate_parsetree_versions.get_out_type_extension ->
      'Migrate_parsetree_versions.get_out_type_extension;
    copy_out_phrase :
      'Migrate_parsetree_versions.get_out_phrase ->
      'Migrate_parsetree_versions.get_out_phrase;
    copy_mapper :
      'Migrate_parsetree_versions.get_mapper ->
      'Migrate_parsetree_versions.get_mapper;
  }
    constraint 'a =
      < case : 'u; core_type : 'v; expression : 'w;
        extension_constructor : 'x; mapper : 'y; out_class_type : 'z;
        out_module_type : 'a1; out_phrase : 'b1; out_sig_item : 'c1;
        out_type : 'd1; out_type_extension : 'e1; out_value : 'f1;
        pattern : 'g1; signature : 'h1; structure : 'i1;
        toplevel_phrase : 'j1; type_declaration : 'k1; type_extension : 'l1 >
    constraint 'b =
      < case : 'c; core_type : 'd; expression : 'e;
        extension_constructor : 'f; mapper : 'g; out_class_type : 'h;
        out_module_type : 'i; out_phrase : 'j; out_sig_item : 'k;
        out_type : 'l; out_type_extension : 'm; out_value : 'n; pattern : 'o;
        signature : 'p; structure : 'q; toplevel_phrase : 'r;
        type_declaration : 's; type_extension : 't >
  val migration_identity :
    (< case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >,
     < case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >)
    Migrate_parsetree_versions.migration_functions
  val migration_compose :
    (< case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >,
     < case : 's; core_type : 't; expression : 'u;
       extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
       out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
       out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
       pattern : 'e1; signature : 'f1; structure : 'g1;
       toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
    Migrate_parsetree_versions.migration_functions ->
    (< case : 's; core_type : 't; expression : 'u;
       extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
       out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
       out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
       pattern : 'e1; signature : 'f1; structure : 'g1;
       toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >,
     < case : 'k1; core_type : 'l1; expression : 'm1;
       extension_constructor : 'n1; mapper : 'o1; out_class_type : 'p1;
       out_module_type : 'q1; out_phrase : 'r1; out_sig_item : 's1;
       out_type : 't1; out_type_extension : 'u1; out_value : 'v1;
       pattern : 'w1; signature : 'x1; structure : 'y1;
       toplevel_phrase : 'z1; type_declaration : 'a2; type_extension : 'b2 >)
    Migrate_parsetree_versions.migration_functions ->
    (< case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >,
     < case : 'k1; core_type : 'l1; expression : 'm1;
       extension_constructor : 'n1; mapper : 'o1; out_class_type : 'p1;
       out_module_type : 'q1; out_phrase : 'r1; out_sig_item : 's1;
       out_type : 't1; out_type_extension : 'u1; out_value : 'v1;
       pattern : 'w1; signature : 'x1; structure : 'y1;
       toplevel_phrase : 'z1; type_declaration : 'a2; type_extension : 'b2 >)
    Migrate_parsetree_versions.migration_functions
  type 'from immediate_migration =
      No_migration : 'from Migrate_parsetree_versions.immediate_migration
    | Immediate_migration :
        (< case : 'a; core_type : 'b; expression : 'c;
           extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
           out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
           out_type : 'j; out_type_extension : 'k; out_value : 'l;
           pattern : 'm; signature : 'n; structure : 'o;
           toplevel_phrase : 'p; type_declaration : 'q; type_extension : 'r >,
         < case : 's; core_type : 't; expression : 'u;
           extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
           out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
           out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
           pattern : 'e1; signature : 'f1; structure : 'g1;
           toplevel_phrase : 'h1; type_declaration : 'i1;
           type_extension : 'j1 >)
        Migrate_parsetree_versions.migration_functions *
        < case : 's; core_type : 't; expression : 'u;
          extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
          out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
          out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
          pattern : 'e1; signature : 'f1; structure : 'g1;
          toplevel_phrase : 'h1; type_declaration : 'i1;
          type_extension : 'j1 >
        Migrate_parsetree_versions.ocaml_version -> < case : 'a;
                                                      core_type : 'b;
                                                      expression : 'c;
                                                      extension_constructor : 'd;
                                                      mapper : 'e;
                                                      out_class_type : 'f;
                                                      out_module_type : 'g;
                                                      out_phrase : 'h;
                                                      out_sig_item : 'i;
                                                      out_type : 'j;
                                                      out_type_extension : 'k;
                                                      out_value : 'l;
                                                      pattern : 'm;
                                                      signature : 'n;
                                                      structure : 'o;
                                                      toplevel_phrase : 'p;
                                                      type_declaration : 'q;
                                                      type_extension : 'r >
                                                    Migrate_parsetree_versions.immediate_migration
  val immediate_migration :
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    [< `Next | `Previous ] ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.immediate_migration
  val migrate :
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
      mapper : 'w; out_class_type : 'x; out_module_type : 'y;
      out_phrase : 'z; out_sig_item : 'a1; out_type : 'b1;
      out_type_extension : 'c1; out_value : 'd1; pattern : 'e1;
      signature : 'f1; structure : 'g1; toplevel_phrase : 'h1;
      type_declaration : 'i1; type_extension : 'j1 >
    Migrate_parsetree_versions.ocaml_version ->
    (< case : 'a; core_type : 'b; expression : 'c;
       extension_constructor : 'd; mapper : 'e; out_class_type : 'f;
       out_module_type : 'g; out_phrase : 'h; out_sig_item : 'i;
       out_type : 'j; out_type_extension : 'k; out_value : 'l; pattern : 'm;
       signature : 'n; structure : 'o; toplevel_phrase : 'p;
       type_declaration : 'q; type_extension : 'r >,
     < case : 's; core_type : 't; expression : 'u;
       extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
       out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
       out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
       pattern : 'e1; signature : 'f1; structure : 'g1;
       toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
    Migrate_parsetree_versions.migration_functions
  module Convert :
    functor (A : OCaml_version) (B : OCaml_version->
      sig
        val copy_structure :
          A.Ast.Parsetree.structure -> B.Ast.Parsetree.structure
        val copy_signature :
          A.Ast.Parsetree.signature -> B.Ast.Parsetree.signature
        val copy_toplevel_phrase :
          A.Ast.Parsetree.toplevel_phrase -> B.Ast.Parsetree.toplevel_phrase
        val copy_core_type :
          A.Ast.Parsetree.core_type -> B.Ast.Parsetree.core_type
        val copy_expression :
          A.Ast.Parsetree.expression -> B.Ast.Parsetree.expression
        val copy_pattern : A.Ast.Parsetree.pattern -> B.Ast.Parsetree.pattern
        val copy_case : A.Ast.Parsetree.case -> B.Ast.Parsetree.case
        val copy_type_declaration :
          A.Ast.Parsetree.type_declaration ->
          B.Ast.Parsetree.type_declaration
        val copy_type_extension :
          A.Ast.Parsetree.type_extension -> B.Ast.Parsetree.type_extension
        val copy_extension_constructor :
          A.Ast.Parsetree.extension_constructor ->
          B.Ast.Parsetree.extension_constructor
        val copy_out_value :
          A.Ast.Outcometree.out_value -> B.Ast.Outcometree.out_value
        val copy_out_type :
          A.Ast.Outcometree.out_type -> B.Ast.Outcometree.out_type
        val copy_out_class_type :
          A.Ast.Outcometree.out_class_type ->
          B.Ast.Outcometree.out_class_type
        val copy_out_module_type :
          A.Ast.Outcometree.out_module_type ->
          B.Ast.Outcometree.out_module_type
        val copy_out_sig_item :
          A.Ast.Outcometree.out_sig_item -> B.Ast.Outcometree.out_sig_item
        val copy_out_type_extension :
          A.Ast.Outcometree.out_type_extension ->
          B.Ast.Outcometree.out_type_extension
        val copy_out_phrase :
          A.Ast.Outcometree.out_phrase -> B.Ast.Outcometree.out_phrase
        val copy_mapper : A.Ast.Ast_mapper.mapper -> B.Ast.Ast_mapper.mapper
      end
end