sig
  exception Invalid of string
  type param = Lid of string | Uid of string | Macro of string | Unused
  val define :
    ?expr:Macro.param list * Camlp4.PreCast.Syntax.Ast.expr -> string -> unit
  val undef : string -> unit
  val is_defined : string -> bool
  module Hook :
    sig
      val define_params : (Macro.param list -> unit) -> unit
      val define :
        (Macro.param list ->
         Camlp4.PreCast.Syntax.Ast.expr -> Camlp4.PreCast.Syntax.Ast.expr) ->
        unit
      val macro_expansion :
        (Camlp4.PreCast.Syntax.Ast.expr -> Camlp4.PreCast.Syntax.Ast.expr) ->
        unit
    end
  exception Invalid_identifier of string
  val is_lowercase_identifier : string -> bool
  val is_capitalized_identifier : string -> bool
  val is_uppercase_identifier : string -> bool
  module Module_longident :
    sig
      type t
      exception Invalid of string
      val of_string : string -> Macro.Module_longident.t
      val to_string : Macro.Module_longident.t -> string
      val is : string -> bool
      val to_id :
        Macro.Module_longident.t ->
        Camlp4.PreCast.Syntax.Ast.Loc.t -> Camlp4.PreCast.Syntax.Ast.ident
      val of_id : Camlp4.PreCast.Syntax.Ast.ident -> Macro.Module_longident.t
      val of_list : string list -> Macro.Module_longident.t
      val qualify_lid :
        string ->
        Macro.Module_longident.t ->
        Camlp4.PreCast.Syntax.Ast.Loc.t -> Camlp4.PreCast.Syntax.Ast.expr
      val qualify_uid :
        string ->
        Macro.Module_longident.t ->
        Camlp4.PreCast.Syntax.Ast.Loc.t -> Camlp4.PreCast.Syntax.Ast.expr
      val qualify :
        Camlp4.PreCast.Syntax.Ast.ident ->
        Macro.Module_longident.t -> Camlp4.PreCast.Syntax.Ast.ident
      val compare :
        Macro.Module_longident.t -> Macro.Module_longident.t -> int
    end
end