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