sig
  module W :
    sig
      type 'a t = 'a
      val return : '-> 'a t
      type ('a, 'b) ft = '-> 'b
      val fmap : ('a, 'b) ft -> 'a t -> 'b t
      type 'a tlist = 'a list
      val nil : unit -> 'a tlist
      val singleton : 'a t -> 'a tlist
      val cons : 'a t -> 'a tlist -> 'a tlist
      val append : 'a tlist -> 'a tlist -> 'a tlist
      val map : ('a, 'b) ft -> 'a tlist -> 'b tlist
    end
  type 'a wrap = 'W.t
  type 'a list_wrap = 'W.tlist
  type uri = string
  val string_of_uri : (uri, string) W.ft
  val uri_of_string : (string, uri) W.ft
  type aname = string
  type event_handler = string
  type mouse_event_handler = string
  type keyboard_event_handler = string
  type attrib
  val float_attrib : aname -> float wrap -> attrib
  val int_attrib : aname -> int wrap -> attrib
  val string_attrib : aname -> string wrap -> attrib
  val space_sep_attrib : aname -> string list wrap -> attrib
  val comma_sep_attrib : aname -> string list wrap -> attrib
  val event_handler_attrib : aname -> event_handler -> attrib
  val mouse_event_handler_attrib : aname -> mouse_event_handler -> attrib
  val keyboard_event_handler_attrib :
    aname -> keyboard_event_handler -> attrib
  val uri_attrib : aname -> uri wrap -> attrib
  val uris_attrib : aname -> uri list wrap -> attrib
  type elt
  type ename = string
  val empty : unit -> elt
  val comment : string -> elt
  val pcdata : string wrap -> elt
  val encodedpcdata : string wrap -> elt
  val entity : string -> elt
  val leaf : ?a:attrib list -> ename -> elt
  val node : ?a:attrib list -> ename -> elt list_wrap -> elt
  val cdata : string -> elt
  val cdata_script : string -> elt
  val cdata_style : string -> elt
  type separator = Space | Comma
  val aname : attrib -> aname
  type acontent = private
      AFloat of float
    | AInt of int
    | AStr of string
    | AStrL of separator * string list
  val acontent : attrib -> acontent
  type econtent = private
      Empty
    | Comment of string
    | EncodedPCDATA of string
    | PCDATA of string
    | Entity of string
    | Leaf of ename * attrib list
    | Node of ename * attrib list * elt list
  val content : elt -> econtent
  val pp :
    ?encode:(string -> string) -> unit -> Format.formatter -> elt -> unit
  val amap : (ename -> attrib list -> attrib list) -> elt -> elt
  val amap1 : (ename -> attrib list -> attrib list) -> elt -> elt
  val rm_attrib : (aname -> bool) -> attrib list -> attrib list
  val rm_attrib_from_list :
    (aname -> bool) -> (string -> bool) -> attrib list -> attrib list
  val map_int_attrib :
    (aname -> bool) -> (int -> int) -> attrib list -> attrib list
  val map_string_attrib :
    (aname -> bool) -> (string -> string) -> attrib list -> attrib list
  val map_string_attrib_in_list :
    (aname -> bool) -> (string -> string) -> attrib list -> attrib list
  val add_int_attrib : aname -> int -> attrib list -> attrib list
  val add_string_attrib : aname -> string -> attrib list -> attrib list
  val add_comma_sep_attrib : aname -> string -> attrib list -> attrib list
  val add_space_sep_attrib : aname -> string -> attrib list -> attrib list
  val fold :
    (unit -> 'a) ->
    (string -> 'a) ->
    (string -> 'a) ->
    (string -> 'a) ->
    (string -> 'a) ->
    (ename -> attrib list -> 'a) ->
    (ename -> attrib list -> 'a list -> 'a) -> elt -> 'a
  val all_entities : elt -> string list
  val translate :
    (ename -> attrib list -> elt) ->
    (ename -> attrib list -> elt list -> elt) ->
    ('state -> ename -> attrib list -> elt list) ->
    ('state -> ename -> attrib list -> elt list -> elt list) ->
    (ename -> attrib list -> 'state -> 'state) -> 'state -> elt -> elt
  val print_list :
    output:(string -> unit) -> ?encode:(string -> string) -> elt list -> unit
  val print : Format.formatter -> elt -> unit
end