sig
  type ('a, 'b) directive =
      ((unit Extlib.InnerIO.output -> unit) -> 'b) -> 'a
  val literal : string -> ('a, 'a) directive
  type pattern = string
  val format :
    unit Extlib.InnerIO.output ->
    pattern -> (unit Extlib.InnerIO.output -> unit) array -> unit
  type ('a, 'b) format =
    ('a, 'b) Extlib.Print.format = {
    pattern : pattern;
    printer : pattern -> ('a, 'b) directive;
  }
  val printf : ('a, unit) format -> 'a
  val eprintf : ('a, unit) format -> 'a
  val sprintf : ('a, string) format -> 'a
  val fprintf : 'Extlib.InnerIO.output -> ('b, unit) format -> 'b
  val ifprintf : '-> ('b, unit) format -> 'b
  val bprintf : Buffer.t -> ('a, unit) format -> 'a
  val kfprintf :
    ('Extlib.InnerIO.output -> 'b) ->
    'Extlib.InnerIO.output -> ('c, 'b) format -> 'c
  val rprintf : ('a, Extlib.Rope.t) format -> 'a
  val krprintf : (Extlib.Rope.t -> 'a) -> ('b, 'a) format -> 'b
  val ksprintf : (string -> 'a) -> ('b, 'a) format -> 'b
  val kbprintf : (Buffer.t -> 'a) -> Buffer.t -> ('b, 'a) format -> 'b
end