sig
  type ('a, 'b) directive = ((unit BatInnerIO.output -> unit) -> 'b) -> 'a
  val literal : string -> ('a, 'a) directive
  type pattern = string
  val format :
    unit BatInnerIO.output ->
    pattern -> (unit BatInnerIO.output -> unit) array -> unit
  type ('a, 'b) format =
    ('a, 'b) BatPrint.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 : 'BatInnerIO.output -> ('b, unit) format -> 'b
  val ifprintf : '-> ('b, unit) format -> 'b
  val bprintf : Buffer.t -> ('a, unit) format -> 'a
  val kfprintf :
    ('BatInnerIO.output -> 'b) ->
    'BatInnerIO.output -> ('c, 'b) format -> 'c
  val rprintf : ('a, BatRope.t) format -> 'a
  val krprintf : (BatRope.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