functor   (String : String) (Buffer : sig                                 type string = String.t                                 type t                                 exception Full                                 val create : int -> t                                 val add_uchar : t -> int -> unit                                 val clear : t -> unit                                 val contents : t -> string                                 val length : t -> int                               end->   sig     type string = String.t     type encoding =         [ `ISO_8859_1 | `US_ASCII | `UTF_16 | `UTF_16BE | `UTF_16LE | `UTF_8 ]     type dtd = string option     type name = string * string     type attribute = name * string     type tag = name * attribute list     type signal =         [ `Data of string | `Dtd of dtd | `El_end | `El_start of tag ]     val ns_xml : string     val ns_xmlns : string     type pos = int * int     type error =         [ `Expected_char_seqs of string list * string         | `Expected_root_element         | `Illegal_char_ref of string         | `Illegal_char_seq of string         | `Malformed_char_stream         | `Max_buffer_size         | `Unexpected_eoi         | `Unknown_encoding of string         | `Unknown_entity_ref of string         | `Unknown_ns_prefix of string ]     exception Error of pos * error     val error_message : error -> string     type source =         [ `Channel of in_channel         | `Fun of unit -> int         | `String of int * std_string ]     type input     val make_input :       ?enc:encoding option ->       ?strip:bool ->       ?ns:(string -> string option) ->       ?entity:(string -> string option) -> source -> input     val input : input -> signal     val input_tree :       el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> 'a     val input_doc_tree :       el:(tag -> 'a list -> 'a) -> data:(string -> 'a) -> input -> dtd * 'a     val peek : input -> signal     val eoi : input -> bool     val pos : input -> pos     type 'a frag = [ `Data of string | `El of tag * 'a list ]     type dest =         [ `Buffer of std_buffer         | `Channel of out_channel         | `Fun of int -> unit ]     type output     val make_output :       ?decl:bool ->       ?nl:bool ->       ?indent:int option ->       ?ns_prefix:(string -> string option) -> dest -> output     val output_depth : output -> int     val output : output -> signal -> unit     val output_tree : ('-> 'a frag) -> output -> '-> unit     val output_doc_tree : ('-> 'a frag) -> output -> dtd * '-> unit   end