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