sig
  module type PrintfArgsSig =
    sig
      type t
      type result
      val print_char : Lm_make_printf.PrintfArgsSig.t -> char -> unit
      val print_string : Lm_make_printf.PrintfArgsSig.t -> string -> unit
      val open_box : Lm_make_printf.PrintfArgsSig.t -> int -> unit
      val open_hbox : Lm_make_printf.PrintfArgsSig.t -> unit
      val open_vbox : Lm_make_printf.PrintfArgsSig.t -> int -> unit
      val open_hvbox : Lm_make_printf.PrintfArgsSig.t -> int -> unit
      val open_hovbox : Lm_make_printf.PrintfArgsSig.t -> int -> unit
      val close_box : Lm_make_printf.PrintfArgsSig.t -> unit
      val print_cut : Lm_make_printf.PrintfArgsSig.t -> unit
      val print_space : Lm_make_printf.PrintfArgsSig.t -> unit
      val force_newline : Lm_make_printf.PrintfArgsSig.t -> unit
      val print_break : Lm_make_printf.PrintfArgsSig.t -> int -> int -> unit
      val print_flush : Lm_make_printf.PrintfArgsSig.t -> unit
      val print_newline : Lm_make_printf.PrintfArgsSig.t -> unit
      val exit :
        Lm_make_printf.PrintfArgsSig.t -> Lm_make_printf.PrintfArgsSig.result
    end
  module type PrintfSig =
    sig
      type t
      type result
      val fprintf :
        Lm_make_printf.PrintfSig.t ->
        ('a, Lm_make_printf.PrintfSig.t, Lm_make_printf.PrintfSig.result)
        Pervasives.format -> 'a
    end
  module MakePrintf :
    functor (Args : PrintfArgsSig->
      sig
        type t = Args.t
        type result = Args.result
        val fprintf : t -> ('a, t, result) format -> 'a
      end
end