Info
is a library for lazily constructing human-readable information as a string or
sexp, with a primary use being error messages. Using Info
is often preferable to
sprintf
or manually constructing strings because you don't have to eagerly construct
the string --- you only need to pay when you actually want to display the info. which
for many applications is rare. Using Info
is also better than creating custom
exceptions because you have more control over the format.
Info is intended to be constructed in the following style; for simple info, you write:
Info.of_string "Unable to find file"
Or for a more descriptive Info
without attaching any content (but evaluating the
result eagerly):
Info.createf "Process %s exited with code %d" process exit_code
For info where you want to attach some content, you would write:
Info.create "Unable to find file" filename <:sexp_of< string >>
Or even,
Info.create "price too big" (price, [`Max max_price])
(<:sexp_of< float * [`Max of float] >>)
Note that an Info.t
can be created from any arbritrary sexp with Info.t_of_sexp
.
to_string_hum
forces the lazy message, which might be an expensive operation.
to_string_hum
usually produces a sexp; however, it is guaranteed that to_string_hum
(of_string s) = s
.
If this string is going to go into a log file, you may find it useful to ensure that
the string is only one line long. To do this, use to_string_mach t
.
old version (pre 109.61) of to_string_hum
that some applications rely on.
Calls should be replaced with to_string_mach t
, which outputs more parenthesis and
backslashes.
For create msg z sexp_of_z
, be careful to use only immutable values for z
, or be
aware that z
will be lazily converted to a sexp at a later point in time, which will
pick up the then-current state of z
.
Construct an error containing only a string from a format. This eagerly constructs the string.