## `printf`: formatting printing functions

    type ('a, 'b, 'c) format

  The type of format strings. `'a` is the type of the parameters of the string, `'c` is the result type for the `printf`-style function, and `'b` is the type of the first argument given to `%a` and `%t` printing functions.

    value fprintf: out_channel -> ('a, out_channel, unit) format -> 'a

  `fprintf outchan format arg1 ... argN` formats the arguments `arg1` to `argN` according to the format string `format`, and outputs the resulting string on the channel `outchan`. The format is a character string which contains two types of objects: plain characters, which are simply copied to the output channel, and conversion specifications, each of which causes conversion and printing of one argument. Conversion specifications consist in the `%` character, followed by optional flags and field widths, followed by one conversion character. The conversion characters and their meanings are:
  `d` or `i`: convert an integer argument to signed decimal
  `u`: convert an integer argument to unsigned decimal
  `x`: convert an integer argument to unsigned hexadecimal, using lowercase letters.
  `X`: convert an integer argument to unsigned hexadecimal, using uppercase letters.
  `s`: insert a string argument
  `c`: insert a character argument
  `f`: convert a floating-point argument to decimal notation, in the style `dddd.ddd`
  `e` or `E`: convert a floating-point argument to decimal notation, in the style `d.ddd e+-dd` (mantissa and exponent)
  `g` or `G`: convert a floating-point argument to decimal notation, in style `f` or `e`, `E` (whichever is more compact)
  `b`: convert a boolean argument to the string `true` or `false`
  `a`: user-defined printer. Takes two arguments and apply the first one to `outchan` (the current output channel) and to the second argument. The first argument must therefore have type `out_channel -> 'b -> unit` and the second `'b`. The output produced by the function is therefore inserted in the output of `fprintf` at the current point.
  `t`: same as `%a`, but takes only one argument (with type `out_channel -> unit`) and apply it to `outchan`.
  Refer to the C library `printf` function for the meaning of flags and field width specifiers. If too few arguments are provided, printing stops just before converting the first missing argument.

    value printf: ('a, out_channel, unit) format -> 'a

  Same as `fprintf`, but output on `std_out`.

    value eprintf: ('a, out_channel, unit) format -> 'a

  Same as `fprintf`, but output on `std_err`.

    value sprintf: ('a, unit, string) format -> 'a

  Same as `fprintf`, except that the result of the formatting is returned as a string instead of being written on a channel.

    value fprint: out_channel -> string -> unit

  Print the given string on the given output channel, without any formatting. This is the same function as `output_string` of module `io`.

    value print: string -> unit

  Print the given string on `std_out`, without any formatting. This is the same function as `print_string` of module `io`.

    value eprint: string -> unit

  Print the given string on `std_err`, without any formatting. This is the same function as `prerr_string` of module `io`.