functor (Loc : Sig.Loc->
  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 = BTrue | BFalse | BAnt of string
    and rec_flag = ReRecursive | ReNil | ReAnt of string
    and direction_flag = DiTo | DiDownto | DiAnt of string
    and mutable_flag = MuMutable | MuNil | MuAnt of string
    and private_flag = PrPrivate | PrNil | PrAnt of string
    and virtual_flag = ViVirtual | ViNil | ViAnt of string
    and override_flag = OvOverride | OvNil | OvAnt of string
    and row_var_flag = RvRowVar | RvNil | RvAnt of string
    and 'a meta_option = ONone | OSome of '| OAnt of string
    and 'a meta_list = LNil | LCons of 'a * 'a meta_list | LAnt of string
    and 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 =
        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 =
        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 =
        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 =
        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 =
        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 =
        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 =
        BiNil of loc
      | BiAnd of loc * binding * binding
      | BiEq of loc * patt * expr
      | BiAnt of loc * string
    and rec_binding =
        RbNil of loc
      | RbSem of loc * rec_binding * rec_binding
      | RbEq of loc * ident * expr
      | RbAnt of loc * string
    and 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 =
        McNil of loc
      | McOr of loc * match_case * match_case
      | McArr of loc * patt * expr * expr
      | McAnt of loc * string
    and 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 =
        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 =
        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 =
        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 =
        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 =
        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