functor (Ast : Ast->
  sig
    module type SIMPLE =
      sig
        val parse_expr : Camlp4.Sig.Ast.loc -> string -> Camlp4.Sig.Ast.expr
        val parse_patt : Camlp4.Sig.Ast.loc -> string -> Camlp4.Sig.Ast.patt
      end
    module type S =
      sig
        val parse_implem :
          ?directive_handler:(Camlp4.Sig.Ast.str_item ->
                              Camlp4.Sig.Ast.str_item option) ->
          Camlp4.Sig.Ast.loc -> char Stream.t -> Camlp4.Sig.Ast.str_item
        val parse_interf :
          ?directive_handler:(Camlp4.Sig.Ast.sig_item ->
                              Camlp4.Sig.Ast.sig_item option) ->
          Camlp4.Sig.Ast.loc -> char Stream.t -> Camlp4.Sig.Ast.sig_item
      end
  end