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
.
module type S : sig ... end
module type Info : sig ... end