Up

module Info

: sig

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.

#
type t
#
val to_string_hum : t -> string

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.

#
val to_string_mach : t -> string

to_string_mach t outputs t as a sexp on a single-line.

#
val to_string_hum_deprecated : t -> string

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.

#
val of_string : string -> t
#
val of_lazy : string Lazy.t -> t

Be careful that the body of the lazy or thunk does not access mutable data, since it will only be called at an undetermined later point.

#
val of_thunk : (unit -> string) -> t
#
val create : ?here:Source_code_position0.t -> string -> 'a -> ('a -> Sexplib.Sexp.t) -> t

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.

#
val createf : ('a, unit, string, t) Pervasives.format4 -> 'a

Construct an error containing only a string from a format. This eagerly constructs the string.

#
val tag : t -> string -> t
#
val tag_arg : t -> string -> 'a -> ('a -> Sexplib.Sexp.t) -> t
#
val of_list : ?trunc_after:int -> t list -> t
#
val of_exn : ?backtrace:[
| `Get
| `This of string
] -> exn -> t
#
val to_exn : t -> exn
#
val pp : Format.formatter -> t -> unit
#
val t_of_sexp : Sexplib.Sexp.t -> t
#
val sexp_of_t : t -> Sexplib.Sexp.t
#
val bin_t : t Bin_prot.Type_class.t
#
val bin_read_t : t Bin_prot.Read.reader
#
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
#
val bin_reader_t : t Bin_prot.Type_class.reader
#
val bin_size_t : t Bin_prot.Size.sizer
#
val bin_write_t : t Bin_prot.Write.writer
#
val bin_writer_t : t Bin_prot.Type_class.writer
end