sig
  module type Printer =
    sig
      val print_list :
        output:(string -> unit) ->
        ?encode:(string -> string) -> Ocamlduce.Load.anyxml list -> unit
    end
  module type Typed_xml =
    sig
      module Info : Xml_sigs.Info
      type elt
      type doc
      val of_doc : Xml_sigs_duce.Typed_xml.doc -> Ocamlduce.Load.anyxml
      val of_elt : Xml_sigs_duce.Typed_xml.elt -> Ocamlduce.Load.anyxml
    end
  module type Raw_typed_printer =
    sig
      val print_list :
        output:(string -> unit) ->
        ?encode:(string -> string) ->
        {{<_ ..>X1 where X1 = [ (<_ ..>X1 | Char)* ]}} list -> unit
      val print :
        output:(string -> unit) ->
        ?encode:(string -> string) ->
        ?advert:string ->
        {{<_ ..>X1 where X1 = [ (<_ ..>X1 | Char)* ]}} -> unit
    end
  module type Typed_printer =
    sig
      module Typed_xml : Typed_xml
      type elt = Xml_sigs_duce.Typed_xml.elt
      type doc = Xml_sigs_duce.Typed_xml.doc
      val print_list :
        output:(string -> unit) ->
        ?encode:(string -> string) ->
        Xml_sigs_duce.Typed_printer.elt list -> unit
      val print :
        output:(string -> unit) ->
        ?encode:(string -> string) ->
        ?advert:string -> Xml_sigs_duce.Typed_printer.doc -> unit
    end
end