sig
  module Loc :
    sig
      type t = Loc.t
      val mk : string -> t
      val ghost : t
      val of_lexing_position : Lexing.position -> t
      val to_ocaml_location : t -> Camlp4_import.Location.t
      val of_ocaml_location : Camlp4_import.Location.t -> t
      val of_lexbuf : Lexing.lexbuf -> t
      val of_tuple : string * int * int * int * int * int * int * bool -> t
      val to_tuple : t -> string * int * int * int * int * int * int * bool
      val merge : t -> t -> t
      val join : t -> t
      val move : [ `both | `start | `stop ] -> int -> t -> t
      val shift : int -> t -> t
      val move_line : int -> t -> t
      val file_name : t -> string
      val start_line : t -> int
      val stop_line : t -> int
      val start_bol : t -> int
      val stop_bol : t -> int
      val start_off : t -> int
      val stop_off : t -> int
      val start_pos : t -> Lexing.position
      val stop_pos : t -> Lexing.position
      val is_ghost : t -> bool
      val ghostify : t -> t
      val set_file_name : string -> t -> t
      val strictly_before : t -> t -> bool
      val make_absolute : t -> t
      val print : Format.formatter -> t -> unit
      val dump : Format.formatter -> t -> unit
      val to_string : t -> string
      exception Exc_located of t * exn
      val raise : t -> exn -> 'a
      val name : string ref
    end
  type loc = Loc.t
  and meta_bool =
    Struct.Camlp4Ast.Make(Loc).meta_bool =
      BTrue
    | BFalse
    | BAnt of string
  and rec_flag =
    Struct.Camlp4Ast.Make(Loc).rec_flag =
      ReRecursive
    | ReNil
    | ReAnt of string
  and direction_flag =
    Struct.Camlp4Ast.Make(Loc).direction_flag =
      DiTo
    | DiDownto
    | DiAnt of string
  and mutable_flag =
    Struct.Camlp4Ast.Make(Loc).mutable_flag =
      MuMutable
    | MuNil
    | MuAnt of string
  and private_flag =
    Struct.Camlp4Ast.Make(Loc).private_flag =
      PrPrivate
    | PrNil
    | PrAnt of string
  and virtual_flag =
    Struct.Camlp4Ast.Make(Loc).virtual_flag =
      ViVirtual
    | ViNil
    | ViAnt of string
  and override_flag =
    Struct.Camlp4Ast.Make(Loc).override_flag =
      OvOverride
    | OvNil
    | OvAnt of string
  and row_var_flag =
    Struct.Camlp4Ast.Make(Loc).row_var_flag =
      RvRowVar
    | RvNil
    | RvAnt of string
  and 'a meta_option =
    'Struct.Camlp4Ast.Make(Loc).meta_option =
      ONone
    | OSome of 'a
    | OAnt of string
  and 'a meta_list =
    'Struct.Camlp4Ast.Make(Loc).meta_list =
      LNil
    | LCons of 'a * 'a meta_list
    | LAnt of string
  and ident =
    Struct.Camlp4Ast.Make(Loc).ident =
      IdAcc of loc * ident * ident
    | IdApp of loc * ident * ident
    | IdLid of loc * string
    | IdUid of loc * string
    | IdAnt of loc * string
  and ctyp =
    Struct.Camlp4Ast.Make(Loc).ctyp =
      TyNil of loc
    | TyAli of loc * ctyp * ctyp
    | TyAny of loc
    | TyApp of loc * ctyp * ctyp
    | TyArr of loc * ctyp * ctyp
    | TyCls of loc * ident
    | TyLab of loc * string * ctyp
    | TyId of loc * ident
    | TyMan of loc * ctyp * ctyp
    | TyDcl of loc * string * ctyp list * ctyp * (ctyp * ctyp) list
    | TyObj of loc * ctyp * row_var_flag
    | TyOlb of loc * string * ctyp
    | TyPol of loc * ctyp * ctyp
    | TyQuo of loc * string
    | TyQuP of loc * string
    | TyQuM of loc * string
    | TyVrn of loc * string
    | TyRec of loc * ctyp
    | TyCol of loc * ctyp * ctyp
    | TySem of loc * ctyp * ctyp
    | TyCom of loc * ctyp * ctyp
    | TySum of loc * ctyp
    | TyOf of loc * ctyp * ctyp
    | TyAnd of loc * ctyp * ctyp
    | TyOr of loc * ctyp * ctyp
    | TyPrv of loc * ctyp
    | TyMut of loc * ctyp
    | TyTup of loc * ctyp
    | TySta of loc * ctyp * ctyp
    | TyVrnEq of loc * ctyp
    | TyVrnSup of loc * ctyp
    | TyVrnInf of loc * ctyp
    | TyVrnInfSup of loc * ctyp * ctyp
    | TyAmp of loc * ctyp * ctyp
    | TyOfAmp of loc * ctyp * ctyp
    | TyPkg of loc * module_type
    | TyAnt of loc * string
  and patt =
    Struct.Camlp4Ast.Make(Loc).patt =
      PaNil of loc
    | PaId of loc * ident
    | PaAli of loc * patt * patt
    | PaAnt of loc * string
    | PaAny of loc
    | PaApp of loc * patt * patt
    | PaArr of loc * patt
    | PaCom of loc * patt * patt
    | PaSem of loc * patt * patt
    | PaChr of loc * string
    | PaInt of loc * string
    | PaInt32 of loc * string
    | PaInt64 of loc * string
    | PaNativeInt of loc * string
    | PaFlo of loc * string
    | PaLab of loc * string * patt
    | PaOlb of loc * string * patt
    | PaOlbi of loc * string * patt * expr
    | PaOrp of loc * patt * patt
    | PaRng of loc * patt * patt
    | PaRec of loc * patt
    | PaEq of loc * ident * patt
    | PaStr of loc * string
    | PaTup of loc * patt
    | PaTyc of loc * patt * ctyp
    | PaTyp of loc * ident
    | PaVrn of loc * string
    | PaLaz of loc * patt
  and expr =
    Struct.Camlp4Ast.Make(Loc).expr =
      ExNil of loc
    | ExId of loc * ident
    | ExAcc of loc * expr * expr
    | ExAnt of loc * string
    | ExApp of loc * expr * expr
    | ExAre of loc * expr * expr
    | ExArr of loc * expr
    | ExSem of loc * expr * expr
    | ExAsf of loc
    | ExAsr of loc * expr
    | ExAss of loc * expr * expr
    | ExChr of loc * string
    | ExCoe of loc * expr * ctyp * ctyp
    | ExFlo of loc * string
    | ExFor of loc * string * expr * expr * direction_flag * expr
    | ExFun of loc * match_case
    | ExIfe of loc * expr * expr * expr
    | ExInt of loc * string
    | ExInt32 of loc * string
    | ExInt64 of loc * string
    | ExNativeInt of loc * string
    | ExLab of loc * string * expr
    | ExLaz of loc * expr
    | ExLet of loc * rec_flag * binding * expr
    | ExLmd of loc * string * module_expr * expr
    | ExMat of loc * expr * match_case
    | ExNew of loc * ident
    | ExObj of loc * patt * class_str_item
    | ExOlb of loc * string * expr
    | ExOvr of loc * rec_binding
    | ExRec of loc * rec_binding * expr
    | ExSeq of loc * expr
    | ExSnd of loc * expr * string
    | ExSte of loc * expr * expr
    | ExStr of loc * string
    | ExTry of loc * expr * match_case
    | ExTup of loc * expr
    | ExCom of loc * expr * expr
    | ExTyc of loc * expr * ctyp
    | ExVrn of loc * string
    | ExWhi of loc * expr * expr
    | ExOpI of loc * ident * expr
    | ExFUN of loc * string * expr
    | ExPkg of loc * module_expr
  and module_type =
    Struct.Camlp4Ast.Make(Loc).module_type =
      MtNil of loc
    | MtId of loc * ident
    | MtFun of loc * string * module_type * module_type
    | MtQuo of loc * string
    | MtSig of loc * sig_item
    | MtWit of loc * module_type * with_constr
    | MtAnt of loc * string
  and sig_item =
    Struct.Camlp4Ast.Make(Loc).sig_item =
      SgNil of loc
    | SgCls of loc * class_type
    | SgClt of loc * class_type
    | SgSem of loc * sig_item * sig_item
    | SgDir of loc * string * expr
    | SgExc of loc * ctyp
    | SgExt of loc * string * ctyp * string meta_list
    | SgInc of loc * module_type
    | SgMod of loc * string * module_type
    | SgRecMod of loc * module_binding
    | SgMty of loc * string * module_type
    | SgOpn of loc * ident
    | SgTyp of loc * ctyp
    | SgVal of loc * string * ctyp
    | SgAnt of loc * string
  and with_constr =
    Struct.Camlp4Ast.Make(Loc).with_constr =
      WcNil of loc
    | WcTyp of loc * ctyp * ctyp
    | WcMod of loc * ident * ident
    | WcTyS of loc * ctyp * ctyp
    | WcMoS of loc * ident * ident
    | WcAnd of loc * with_constr * with_constr
    | WcAnt of loc * string
  and binding =
    Struct.Camlp4Ast.Make(Loc).binding =
      BiNil of loc
    | BiAnd of loc * binding * binding
    | BiEq of loc * patt * expr
    | BiAnt of loc * string
  and rec_binding =
    Struct.Camlp4Ast.Make(Loc).rec_binding =
      RbNil of loc
    | RbSem of loc * rec_binding * rec_binding
    | RbEq of loc * ident * expr
    | RbAnt of loc * string
  and module_binding =
    Struct.Camlp4Ast.Make(Loc).module_binding =
      MbNil of loc
    | MbAnd of loc * module_binding * module_binding
    | MbColEq of loc * string * module_type * module_expr
    | MbCol of loc * string * module_type
    | MbAnt of loc * string
  and match_case =
    Struct.Camlp4Ast.Make(Loc).match_case =
      McNil of loc
    | McOr of loc * match_case * match_case
    | McArr of loc * patt * expr * expr
    | McAnt of loc * string
  and module_expr =
    Struct.Camlp4Ast.Make(Loc).module_expr =
      MeNil of loc
    | MeId of loc * ident
    | MeApp of loc * module_expr * module_expr
    | MeFun of loc * string * module_type * module_expr
    | MeStr of loc * str_item
    | MeTyc of loc * module_expr * module_type
    | MePkg of loc * expr
    | MeAnt of loc * string
  and str_item =
    Struct.Camlp4Ast.Make(Loc).str_item =
      StNil of loc
    | StCls of loc * class_expr
    | StClt of loc * class_type
    | StSem of loc * str_item * str_item
    | StDir of loc * string * expr
    | StExc of loc * ctyp * ident meta_option
    | StExp of loc * expr
    | StExt of loc * string * ctyp * string meta_list
    | StInc of loc * module_expr
    | StMod of loc * string * module_expr
    | StRecMod of loc * module_binding
    | StMty of loc * string * module_type
    | StOpn of loc * ident
    | StTyp of loc * ctyp
    | StVal of loc * rec_flag * binding
    | StAnt of loc * string
  and class_type =
    Struct.Camlp4Ast.Make(Loc).class_type =
      CtNil of loc
    | CtCon of loc * virtual_flag * ident * ctyp
    | CtFun of loc * ctyp * class_type
    | CtSig of loc * ctyp * class_sig_item
    | CtAnd of loc * class_type * class_type
    | CtCol of loc * class_type * class_type
    | CtEq of loc * class_type * class_type
    | CtAnt of loc * string
  and class_sig_item =
    Struct.Camlp4Ast.Make(Loc).class_sig_item =
      CgNil of loc
    | CgCtr of loc * ctyp * ctyp
    | CgSem of loc * class_sig_item * class_sig_item
    | CgInh of loc * class_type
    | CgMth of loc * string * private_flag * ctyp
    | CgVal of loc * string * mutable_flag * virtual_flag * ctyp
    | CgVir of loc * string * private_flag * ctyp
    | CgAnt of loc * string
  and class_expr =
    Struct.Camlp4Ast.Make(Loc).class_expr =
      CeNil of loc
    | CeApp of loc * class_expr * expr
    | CeCon of loc * virtual_flag * ident * ctyp
    | CeFun of loc * patt * class_expr
    | CeLet of loc * rec_flag * binding * class_expr
    | CeStr of loc * patt * class_str_item
    | CeTyc of loc * class_expr * class_type
    | CeAnd of loc * class_expr * class_expr
    | CeEq of loc * class_expr * class_expr
    | CeAnt of loc * string
  and class_str_item =
    Struct.Camlp4Ast.Make(Loc).class_str_item =
      CrNil of loc
    | CrSem of loc * class_str_item * class_str_item
    | CrCtr of loc * ctyp * ctyp
    | CrInh of loc * override_flag * class_expr * string
    | CrIni of loc * expr
    | CrMth of loc * string * override_flag * private_flag * expr * ctyp
    | CrVal of loc * string * override_flag * mutable_flag * expr
    | CrVir of loc * string * private_flag * ctyp
    | CrVvr of loc * string * mutable_flag * ctyp
    | CrAnt of loc * string
  val loc_of_ctyp : ctyp -> loc
  val loc_of_patt : patt -> loc
  val loc_of_expr : expr -> loc
  val loc_of_module_type : module_type -> loc
  val loc_of_module_expr : module_expr -> loc
  val loc_of_sig_item : sig_item -> loc
  val loc_of_str_item : str_item -> loc
  val loc_of_class_type : class_type -> loc
  val loc_of_class_sig_item : class_sig_item -> loc
  val loc_of_class_expr : class_expr -> loc
  val loc_of_class_str_item : class_str_item -> loc
  val loc_of_with_constr : with_constr -> loc
  val loc_of_binding : binding -> loc
  val loc_of_rec_binding : rec_binding -> loc
  val loc_of_module_binding : module_binding -> loc
  val loc_of_match_case : match_case -> loc
  val loc_of_ident : ident -> loc
  module Meta :
    sig
      module type META_LOC =
        sig
          val meta_loc_patt : loc -> loc -> patt
          val meta_loc_expr : loc -> loc -> expr
        end
      module MetaLoc :
        sig
          val meta_loc_patt : loc -> loc -> patt
          val meta_loc_expr : loc -> loc -> expr
        end
      module MetaGhostLoc :
        sig
          val meta_loc_patt : loc -> '-> patt
          val meta_loc_expr : loc -> '-> expr
        end
      module MetaLocVar :
        sig
          val meta_loc_patt : loc -> '-> patt
          val meta_loc_expr : loc -> '-> expr
        end
      module Make :
        functor (MetaLoc : META_LOC->
          sig
            module Expr :
              sig
                val meta_string : loc -> string -> expr
                val meta_int : loc -> string -> expr
                val meta_float : loc -> string -> expr
                val meta_char : loc -> string -> expr
                val meta_bool : loc -> bool -> expr
                val meta_list : (loc -> '-> expr) -> loc -> 'a list -> expr
                val meta_binding : loc -> binding -> expr
                val meta_rec_binding : loc -> rec_binding -> expr
                val meta_class_expr : loc -> class_expr -> expr
                val meta_class_sig_item : loc -> class_sig_item -> expr
                val meta_class_str_item : loc -> class_str_item -> expr
                val meta_class_type : loc -> class_type -> expr
                val meta_ctyp : loc -> ctyp -> expr
                val meta_expr : loc -> expr -> expr
                val meta_ident : loc -> ident -> expr
                val meta_match_case : loc -> match_case -> expr
                val meta_module_binding : loc -> module_binding -> expr
                val meta_module_expr : loc -> module_expr -> expr
                val meta_module_type : loc -> module_type -> expr
                val meta_patt : loc -> patt -> expr
                val meta_sig_item : loc -> sig_item -> expr
                val meta_str_item : loc -> str_item -> expr
                val meta_with_constr : loc -> with_constr -> expr
                val meta_rec_flag : loc -> rec_flag -> expr
                val meta_mutable_flag : loc -> mutable_flag -> expr
                val meta_virtual_flag : loc -> virtual_flag -> expr
                val meta_private_flag : loc -> private_flag -> expr
                val meta_row_var_flag : loc -> row_var_flag -> expr
                val meta_override_flag : loc -> override_flag -> expr
                val meta_direction_flag : loc -> direction_flag -> expr
              end
            module Patt :
              sig
                val meta_string : loc -> string -> patt
                val meta_int : loc -> string -> patt
                val meta_float : loc -> string -> patt
                val meta_char : loc -> string -> patt
                val meta_bool : loc -> bool -> patt
                val meta_list : (loc -> '-> patt) -> loc -> 'a list -> patt
                val meta_binding : loc -> binding -> patt
                val meta_rec_binding : loc -> rec_binding -> patt
                val meta_class_expr : loc -> class_expr -> patt
                val meta_class_sig_item : loc -> class_sig_item -> patt
                val meta_class_str_item : loc -> class_str_item -> patt
                val meta_class_type : loc -> class_type -> patt
                val meta_ctyp : loc -> ctyp -> patt
                val meta_expr : loc -> expr -> patt
                val meta_ident : loc -> ident -> patt
                val meta_match_case : loc -> match_case -> patt
                val meta_module_binding : loc -> module_binding -> patt
                val meta_module_expr : loc -> module_expr -> patt
                val meta_module_type : loc -> module_type -> patt
                val meta_patt : loc -> patt -> patt
                val meta_sig_item : loc -> sig_item -> patt
                val meta_str_item : loc -> str_item -> patt
                val meta_with_constr : loc -> with_constr -> patt
                val meta_rec_flag : loc -> rec_flag -> patt
                val meta_mutable_flag : loc -> mutable_flag -> patt
                val meta_virtual_flag : loc -> virtual_flag -> patt
                val meta_private_flag : loc -> private_flag -> patt
                val meta_row_var_flag : loc -> row_var_flag -> patt
                val meta_override_flag : loc -> override_flag -> patt
                val meta_direction_flag : loc -> direction_flag -> patt
              end
          end
    end
  class map :
    object ('a)
      method binding : binding -> binding
      method class_expr : class_expr -> class_expr
      method class_sig_item : class_sig_item -> class_sig_item
      method class_str_item : class_str_item -> class_str_item
      method class_type : class_type -> class_type
      method ctyp : ctyp -> ctyp
      method direction_flag : direction_flag -> direction_flag
      method expr : expr -> expr
      method ident : ident -> ident
      method list : ('-> '-> 'c) -> 'b list -> 'c list
      method loc : loc -> loc
      method match_case : match_case -> match_case
      method meta_bool : meta_bool -> meta_bool
      method meta_list : ('-> '-> 'e) -> 'd meta_list -> 'e meta_list
      method meta_option :
        ('-> '-> 'g) -> 'f meta_option -> 'g meta_option
      method module_binding : module_binding -> module_binding
      method module_expr : module_expr -> module_expr
      method module_type : module_type -> module_type
      method mutable_flag : mutable_flag -> mutable_flag
      method override_flag : override_flag -> override_flag
      method patt : patt -> patt
      method private_flag : private_flag -> private_flag
      method rec_binding : rec_binding -> rec_binding
      method rec_flag : rec_flag -> rec_flag
      method row_var_flag : row_var_flag -> row_var_flag
      method sig_item : sig_item -> sig_item
      method str_item : str_item -> str_item
      method string : string -> string
      method unknown : '-> 'h
      method virtual_flag : virtual_flag -> virtual_flag
      method with_constr : with_constr -> with_constr
    end
  class fold :
    object ('a)
      method binding : binding -> 'a
      method class_expr : class_expr -> 'a
      method class_sig_item : class_sig_item -> 'a
      method class_str_item : class_str_item -> 'a
      method class_type : class_type -> 'a
      method ctyp : ctyp -> 'a
      method direction_flag : direction_flag -> 'a
      method expr : expr -> 'a
      method ident : ident -> 'a
      method list : ('-> '-> 'a) -> 'b list -> 'a
      method loc : loc -> 'a
      method match_case : match_case -> 'a
      method meta_bool : meta_bool -> 'a
      method meta_list : ('-> '-> 'a) -> 'c meta_list -> 'a
      method meta_option : ('-> '-> 'a) -> 'd meta_option -> 'a
      method module_binding : module_binding -> 'a
      method module_expr : module_expr -> 'a
      method module_type : module_type -> 'a
      method mutable_flag : mutable_flag -> 'a
      method override_flag : override_flag -> 'a
      method patt : patt -> 'a
      method private_flag : private_flag -> 'a
      method rec_binding : rec_binding -> 'a
      method rec_flag : rec_flag -> 'a
      method row_var_flag : row_var_flag -> 'a
      method sig_item : sig_item -> 'a
      method str_item : str_item -> 'a
      method string : string -> 'a
      method unknown : '-> 'a
      method virtual_flag : virtual_flag -> 'a
      method with_constr : with_constr -> 'a
    end
  val map_expr : (expr -> expr) -> map
  val map_patt : (patt -> patt) -> map
  val map_ctyp : (ctyp -> ctyp) -> map
  val map_str_item : (str_item -> str_item) -> map
  val map_sig_item : (sig_item -> sig_item) -> map
  val map_loc : (loc -> loc) -> map
  val ident_of_expr : expr -> ident
  val ident_of_patt : patt -> ident
  val ident_of_ctyp : ctyp -> ident
  val biAnd_of_list : binding list -> binding
  val rbSem_of_list : rec_binding list -> rec_binding
  val paSem_of_list : patt list -> patt
  val paCom_of_list : patt list -> patt
  val tyOr_of_list : ctyp list -> ctyp
  val tyAnd_of_list : ctyp list -> ctyp
  val tyAmp_of_list : ctyp list -> ctyp
  val tySem_of_list : ctyp list -> ctyp
  val tyCom_of_list : ctyp list -> ctyp
  val tySta_of_list : ctyp list -> ctyp
  val stSem_of_list : str_item list -> str_item
  val sgSem_of_list : sig_item list -> sig_item
  val crSem_of_list : class_str_item list -> class_str_item
  val cgSem_of_list : class_sig_item list -> class_sig_item
  val ctAnd_of_list : class_type list -> class_type
  val ceAnd_of_list : class_expr list -> class_expr
  val wcAnd_of_list : with_constr list -> with_constr
  val meApp_of_list : module_expr list -> module_expr
  val mbAnd_of_list : module_binding list -> module_binding
  val mcOr_of_list : match_case list -> match_case
  val idAcc_of_list : ident list -> ident
  val idApp_of_list : ident list -> ident
  val exSem_of_list : expr list -> expr
  val exCom_of_list : expr list -> expr
  val list_of_ctyp : ctyp -> ctyp list -> ctyp list
  val list_of_binding : binding -> binding list -> binding list
  val list_of_rec_binding :
    rec_binding -> rec_binding list -> rec_binding list
  val list_of_with_constr :
    with_constr -> with_constr list -> with_constr list
  val list_of_patt : patt -> patt list -> patt list
  val list_of_expr : expr -> expr list -> expr list
  val list_of_str_item : str_item -> str_item list -> str_item list
  val list_of_sig_item : sig_item -> sig_item list -> sig_item list
  val list_of_class_sig_item :
    class_sig_item -> class_sig_item list -> class_sig_item list
  val list_of_class_str_item :
    class_str_item -> class_str_item list -> class_str_item list
  val list_of_class_type : class_type -> class_type list -> class_type list
  val list_of_class_expr : class_expr -> class_expr list -> class_expr list
  val list_of_module_expr :
    module_expr -> module_expr list -> module_expr list
  val list_of_module_binding :
    module_binding -> module_binding list -> module_binding list
  val list_of_match_case : match_case -> match_case list -> match_case list
  val list_of_ident : ident -> ident list -> ident list
  val safe_string_escaped : string -> string
  val is_irrefut_patt : patt -> bool
  val is_constructor : ident -> bool
  val is_patt_constructor : patt -> bool
  val is_expr_constructor : expr -> bool
  val ty_of_stl : Loc.t * string * ctyp list -> ctyp
  val ty_of_sbt : Loc.t * string * bool * ctyp -> ctyp
  val bi_of_pe : patt * expr -> binding
  val pel_of_binding : binding -> (patt * expr) list
  val binding_of_pel : (patt * expr) list -> binding
  val sum_type_of_list : (Loc.t * string * ctyp list) list -> ctyp
  val record_type_of_list : (Loc.t * string * bool * ctyp) list -> ctyp
end