sig
  module Make :
    functor (Ast : Sig.Camlp4Ast->
      sig
        module Ast :
          sig
            module Loc :
              sig
                type t = Ast.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 = Ast.meta_bool = BTrue | BFalse | BAnt of string
            and rec_flag =
              Ast.rec_flag =
                ReRecursive
              | ReNil
              | ReAnt of string
            and direction_flag =
              Ast.direction_flag =
                DiTo
              | DiDownto
              | DiAnt of string
            and mutable_flag =
              Ast.mutable_flag =
                MuMutable
              | MuNil
              | MuAnt of string
            and private_flag =
              Ast.private_flag =
                PrPrivate
              | PrNil
              | PrAnt of string
            and virtual_flag =
              Ast.virtual_flag =
                ViVirtual
              | ViNil
              | ViAnt of string
            and override_flag =
              Ast.override_flag =
                OvOverride
              | OvNil
              | OvAnt of string
            and row_var_flag =
              Ast.row_var_flag =
                RvRowVar
              | RvNil
              | RvAnt of string
            and 'a meta_option =
              'Ast.meta_option =
                ONone
              | OSome of 'a
              | OAnt of string
            and 'a meta_list =
              'Ast.meta_list =
                LNil
              | LCons of 'a * 'a meta_list
              | LAnt of string
            and ident =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.binding =
                BiNil of loc
              | BiAnd of loc * binding * binding
              | BiEq of loc * patt * expr
              | BiAnt of loc * string
            and rec_binding =
              Ast.rec_binding =
                RbNil of loc
              | RbSem of loc * rec_binding * rec_binding
              | RbEq of loc * ident * expr
              | RbAnt of loc * string
            and module_binding =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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 =
              Ast.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
        type 'a filter = '-> 'a
        val register_sig_item_filter : Ast.sig_item filter -> unit
        val register_str_item_filter : Ast.str_item filter -> unit
        val register_topphrase_filter : Ast.str_item filter -> unit
        val fold_interf_filters :
          ('-> Ast.sig_item filter -> 'a) -> '-> 'a
        val fold_implem_filters :
          ('-> Ast.str_item filter -> 'a) -> '-> 'a
        val fold_topphrase_filters :
          ('-> Ast.str_item filter -> 'a) -> '-> 'a
      end
end