sig
  type 'a io
  module Encoding :
    sig
      type t = Markup.Encoding.t
      val decode :
        ?report:(Markup.location ->
                 Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
        Markup.Encoding.t ->
        (char, 'a) Markup.stream -> (int, Markup.async) Markup.stream
    end
  val parse_xml :
    ?report:(Markup.location -> Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
    ?encoding:Markup.ASYNCHRONOUS.Encoding.t ->
    ?namespace:(string -> string option) ->
    ?entity:(string -> string option) ->
    ?context:[< `Document | `Fragment ] ->
    (char, 'a) Markup.stream -> Markup.async Markup.parser
  val write_xml :
    ?report:(Markup.signal * int ->
             Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
    ?prefix:(string -> string option) ->
    ([< Markup.signal ], 'a) Markup.stream ->
    (char, Markup.async) Markup.stream
  val parse_html :
    ?report:(Markup.location -> Markup.Error.t -> unit Markup.ASYNCHRONOUS.io) ->
    ?encoding:Markup.ASYNCHRONOUS.Encoding.t ->
    ?context:[< `Document | `Fragment of string ] ->
    (char, 'a) Markup.stream -> Markup.async Markup.parser
  val write_html :
    ?escape_attribute:(string -> string) ->
    ?escape_text:(string -> string) ->
    ([< Markup.signal ], 'a) Markup.stream ->
    (char, Markup.async) Markup.stream
  val fn :
    (unit -> char option Markup.ASYNCHRONOUS.io) ->
    (char, Markup.async) Markup.stream
  val to_string : (char, 'a) Markup.stream -> string Markup.ASYNCHRONOUS.io
  val to_buffer :
    (char, 'a) Markup.stream -> Stdlib.Buffer.t Markup.ASYNCHRONOUS.io
  val stream :
    (unit -> 'a option Markup.ASYNCHRONOUS.io) ->
    ('a, Markup.async) Markup.stream
  val next : ('a, 'b) Markup.stream -> 'a option Markup.ASYNCHRONOUS.io
  val peek : ('a, 'b) Markup.stream -> 'a option Markup.ASYNCHRONOUS.io
  val transform :
    ('-> '-> ('c list * 'a option) Markup.ASYNCHRONOUS.io) ->
    '-> ('b, 'd) Markup.stream -> ('c, Markup.async) Markup.stream
  val fold :
    ('-> '-> 'Markup.ASYNCHRONOUS.io) ->
    '-> ('b, 'c) Markup.stream -> 'Markup.ASYNCHRONOUS.io
  val map :
    ('-> 'Markup.ASYNCHRONOUS.io) ->
    ('a, 'c) Markup.stream -> ('b, Markup.async) Markup.stream
  val filter :
    ('-> bool Markup.ASYNCHRONOUS.io) ->
    ('a, 'b) Markup.stream -> ('a, Markup.async) Markup.stream
  val filter_map :
    ('-> 'b option Markup.ASYNCHRONOUS.io) ->
    ('a, 'c) Markup.stream -> ('b, Markup.async) Markup.stream
  val iter :
    ('-> unit Markup.ASYNCHRONOUS.io) ->
    ('a, 'b) Markup.stream -> unit Markup.ASYNCHRONOUS.io
  val drain : ('a, 'b) Markup.stream -> unit Markup.ASYNCHRONOUS.io
  val to_list : ('a, 'b) Markup.stream -> 'a list Markup.ASYNCHRONOUS.io
  val load :
    ('a, 'b) Markup.stream ->
    ('a, Markup.sync) Markup.stream Markup.ASYNCHRONOUS.io
  val tree :
    ?text:(string list -> 'a) ->
    ?element:(Markup.name -> (Markup.name * string) list -> 'a list -> 'a) ->
    ?comment:(string -> 'a) ->
    ?pi:(string -> string -> 'a) ->
    ?xml:(Markup.xml_declaration -> 'a) ->
    ?doctype:(Markup.doctype -> 'a) ->
    ([< Markup.signal ], 'b) Markup.stream ->
    'a option Markup.ASYNCHRONOUS.io
end