Module Fmt
Format pretty-printer combinators.
Consult naming conventions for your pretty-printers.
References
- The
Formatmodule documentation. - The required reading
Formatmodule tutorial.
v0.8.5 - homepage
Formatting
val pf : Stdlib.Format.formatter -> ('a, Stdlib.Format.formatter, unit) Stdlib.Pervasives.format -> 'apfisFormat.fprintf.
val kpf : (Stdlib.Format.formatter -> 'a) -> Stdlib.Format.formatter -> ('b, Stdlib.Format.formatter, unit, 'a) Stdlib.format4 -> 'bkpfisFormat.kfprintf.
val strf : ('a, Stdlib.Format.formatter, unit, string) Stdlib.format4 -> 'astrfisFormat.asprintf.Note. When using
strfutf_8andstyle_rendererare always respectively set totrueand`None. See alsostrf_like.
val kstrf : (string -> 'a) -> ('b, Stdlib.Format.formatter, unit, 'a) Stdlib.format4 -> 'bkstrfis likestrfbut continuation based.
val strf_like : Stdlib.Format.formatter -> ('a, Stdlib.Format.formatter, unit, string) Stdlib.format4 -> 'astrf_like ppfis likestrfexcept itsutf_8andstyle_renderersettings are those ofppf.
val with_buffer : ?like:Stdlib.Format.formatter -> Stdlib.Buffer.t -> Stdlib.Format.formatterwith_buffer ~like bis a formatter whoseutf_8andstyle_renderersettings are copied from those oflike(if provided).
Formatting to standard outputs
val stdout : Stdlib.Format.formatterstdoutis the standard output formatter.
val stderr : Stdlib.Format.formatterstderris the standard error formatter.
val pr : ('a, Stdlib.Format.formatter, unit) Stdlib.format -> 'aprispf stdout.
val epr : ('a, Stdlib.Format.formatter, unit) Stdlib.format -> 'aeprispf stderr.
Formatting exceptions
val failwith : ('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'afailwithiskstrf failwith, raisesPervasives.Failure with a pretty-printed string argument.
val invalid_arg : ('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'ainvalid_argiskstrf invalid_arg, raisesPervasives.Invalid_argument with a pretty-printed string argument.
Formatters
type 'a t= Stdlib.Format.formatter -> 'a -> unitThe type for formatters of values of type
'a.
val nop : 'a tnopformats nothing.
val cut : unit tcutisFormat.pp_print_cut.
val sp : unit tspisFormat.pp_print_space.
val unit : (unit, Stdlib.Format.formatter, unit) Stdlib.Pervasives.format -> unit tunit fmtformats a unit value with the formatfmt.
val fmt : ('a, Stdlib.Format.formatter, unit) Stdlib.Pervasives.format -> Stdlib.Format.formatter -> 'afmt fmt ppfispf ppf fmt. Iffmtis used with a single non-constant formatting directive, generates a value of typet.
val always : (unit, Stdlib.Format.formatter, unit) Stdlib.Pervasives.format -> 'a talways fmt ppf vformats any value with the constant formatfmt.
Base type formatters
val bool : bool tboolisFormat.pp_print_bool.
val int : int tintispf ppf "%d".
val nativeint : nativeint tnativeint ppfispf ppf "%nd".
val int32 : int32 tint32 ppfispf ppf "%ld".
val int64 : int64 tint64 ppfispf ppf "%Ld".
val uint : int tuint ppfispf ppf "%u".
val unativeint : nativeint tunativeint ppfispf ppf "%nu".
val uint32 : int32 tuint32 ppfispf ppf "%lu".
val uint64 : int64 tuint64 ppfispf ppf "%Lu".
val float : float tfloat ppfispf ppf "%g".
val float_dfrac : int -> float tfloat_dfrac drounds the float to thedth decimal fractional digit and formats the result with"%g". Ties are rounded towards positive infinity. The result is only defined for0 <= d <= 16.
val float_dsig : int -> float tfloat_dsig drounds the normalized decimal significand of the float to thedth decimal fractional digit and formats the result with"%g". Ties are rounded towards positive infinity. The result is NaN on infinities and only defined for0 <= d <= 16.Warning. The current implementation overflows on large
dand floats.
val char : char tcharisFormat.pp_print_char.
val string : string tstringisFormat.pp_print_string.
val buffer : Stdlib.Buffer.t tbufferformats aBuffer.t value's current contents.
val exn : exn texnformats an exception.
val exn_backtrace : (exn * Stdlib.Printexc.raw_backtrace) texn_backtraceformats an exception backtrace.
Polymorphic type formatters
These formatters give full control to the client over the formatting process and do not wrap the formatted structures with boxes. Use the Dump module to quickly format values for inspection.
val pair : ?sep:unit t -> 'a t -> 'b t -> ('a * 'b) tpair ~sep pp_fst pp_sndformats a pair. The first and second projection are formatted usingpp_fstandpp_sndand are separated bysep(defaults tocut).
val option : ?none:unit t -> 'a t -> 'a option toption ~none pp_vformats an optional value. TheSomecase usespp_vandNoneusesnone(defaults tonop).
val result : ok:'a t -> error:'b t -> ('a, 'b) Result.result tresult ~ok ~errorformats a result value usingokfor theOkcase anderrorfor theErrorcase.
val list : ?sep:unit t -> 'a t -> 'a list tlist sep pp_vformats list elements. Each element of the list is formatted in order withpp_v. Elements are separated bysep(defaults tocut). If the list is empty, this isnop.
val array : ?sep:unit t -> 'a t -> 'a array tarray sep pp_vformats array elements. Each element of the array is formatted in order withpp_v. Elements are separated bysep(defaults tocut). If the array is empty, this isnop.
val hashtbl : ?sep:unit t -> ('a * 'b) t -> ('a, 'b) Stdlib.Hashtbl.t thashtbl ~sep pp_bindingformats the bindings of a hash table. Each binding is formatted withpp_bindingand bindings are separated bysep(defaults tocut). If the hash table has multiple bindings for a given key, all bindings are formatted, with the most recent binding first. If the hash table is empty, this isnop.
val queue : ?sep:unit t -> 'a t -> 'a Stdlib.Queue.t tqueue ~sep pp_vformats queue elements. Each element of the queue is formatted in least recently added order withpp_v. Elements are separated bysep(defaults tocut). If the queue is empty, this isnop.
val stack : ?sep:unit t -> 'a t -> 'a Stdlib.Stack.t tstack ~sep pp_vformats stack elements. Each element of the stack is formatted from top to bottom order withpp_v. Elements are separated bysep(defaults tocut). If the stack is empty, this isnop.
val iter : ?sep:unit t -> (('a -> unit) -> 'b -> unit) -> 'a t -> 'b titer ~sep iter pp_eltformats the iterations ofiterover a value usingpp_elt. Iterations are separated bysep(defaults tocut).
val iter_bindings : ?sep:unit t -> (('a -> 'b -> unit) -> 'c -> unit) -> ('a * 'b) t -> 'c titer_bindings ~sep iter pp_bindingformats the iterations ofiterover a value usingpp_binding. Iterations are separated bysep(defaults tocut).
module Dump : sig ... endFormatters for inspecting OCaml values.
Boxes
val box : ?indent:int -> 'a t -> 'a tbox ~indent pp ppfwrapsppin a horizontal or vertical box. Break hints that lead to a new line addindentto the current indentation (defaults to0).
val hbox : 'a t -> 'a thboxis likeboxbut is a horizontal box: the line is not split in this box (but may be in sub-boxes).
Brackets
Words, paragraphs, text and lines
Note. These functions only work on US-ASCII strings and/or with newlines ('\n'). If you are dealing with UTF-8 strings or different kinds of line endings you should use the pretty-printers from Uuseg_string.
White space. White space is one of the following US-ASCII characters: space ' ' (0x20), tab '\t' (0x09), newline '\n' (0x0A), vertical tab (0x0B), form feed (0x0C), carriage return '\r' (0x0D).
val words : string twordsformats words by suppressing initial and trailing white space and replacing consecutive white space with a singleFormat.pp_print_space.
val paragraphs : string tparagraphsformats paragraphs by suppressing initial and trailing spaces and newlines, replacing blank lines (a line made only of white space) by a twoFormat.pp_force_newline and remaining consecutive white space with a singleFormat.pp_print_space.
val text : string ttextformats text by respectively replacing spaces and newlines in the string withFormat.pp_print_space andFormat.pp_force_newline.
val lines : string tlinesformats lines by replacing newlines ('\n') in the string with calls toFormat.pp_force_newline.
val text_loc : ((int * int) * (int * int)) ttext_locformats a line-column text range according to GNU conventions.
Appending
Byte sizes
val byte_size : int tbyte_sizeformats a byte size according to its magnitude using SI prefixes up to peta bytes (1015).
val bi_byte_size : int tbi_byte_sizeformats a byte size according to its magnitude using binary prefixes up to pebi bytes (215).
Conditional UTF-8 formatting
Note. Since Format is not UTF-8 aware using UTF-8 output may derail the pretty printing process. Use the pretty-printers from Uuseg_string if you are serious about UTF-8 formatting.
val if_utf_8 : 'a t -> 'a t -> 'a tif_utf_8 pp_u pp ppf vis:pp_u ppf vifutf_8 ppfistrue.pp ppf votherwise.
val utf_8 : Stdlib.Format.formatter -> boolutf_8 ppfistrueif UTF-8 output is enabled onppf. Ifset_utf_8hasn't been called onppfthis istrue.
val set_utf_8 : Stdlib.Format.formatter -> bool -> unitset_utf_8 ppf benables or disables conditional UTF-8 formatting onppf.Warning. Using this function replaces any
Format.tag functions that may be in place.- raises Invalid_argument
if
ppfisFormat.str_formatter: it is is always UTF-8 enabled.
Styled formatting
type style=[|`Bold|`Underline|`Black|`Red|`Green|`Yellow|`Blue|`Magenta|`Cyan|`White|`None]The type for styles.
val styled_unit : style -> (unit, Stdlib.Format.formatter, unit) Stdlib.Pervasives.format -> unit tstyled_unit s fmtisstyle s (unit fmt).
Style rendering control
type style_renderer=[|`Ansi_tty|`None]The type for style renderers.
`Ansi_tty, renders styles using ANSI escape sequences.`None, styled rendering has no effect.
val style_renderer : Stdlib.Format.formatter -> style_rendererstyle_renderer ppfis the style renderer used byppf. Ifset_style_rendererhas never been called onppfthis is`None.
val set_style_renderer : Stdlib.Format.formatter -> style_renderer -> unitset_style_renderer ppf rsets the style renderer ofppftor.Warning. Using this function replaces any
Format.tag functions that may be in place.- raises Invalid_argument
if
ppfisFormat.str_formatter: its renderer is always`None.
Converting with string value converters
val of_to_string : ('a -> string) -> 'a tof_to_string f ppf visstring ppf (f v).
val to_to_string : 'a t -> 'a -> stringto_to_string pp_v visstrf "%a" pp_v v.
Naming conventions
Given a type ty use:
pp_tyfor a pretty printer that provides full control to the client and does not wrap the formatted value in an enclosing box. See these examples.dump_tyfor a pretty printer that provides little control over the pretty-printing process, wraps the rendering in an enclosing box and tries as much as possible to respect the OCaml syntax. These pretty-printers should make it easy to inspect and understand values of the given type, they are mainly used for quick printf debugging and/or toplevel interaction. See these examples.
If you are in a situation where making a difference between dump_ty and pp_ty doesn't make sense then use pp_ty.
For a type ty that is the main type of the module (the "M.t" convention) drop the suffix, that is simply use M.pp and M.dump.