jon.recoil.org

Module Base.SexpSource

Sourcetype t = Sexplib0.Sexp.t =
  1. | Atom of string
  2. | List of Base.Sexp.t list

Type of S-expressions

Sourceval globalize : Base.Sexp.t -> Base.Sexp.t
include module type of Sexplib0.Sexp with type t := Sexplib0.Sexp.t
Sourceexception Not_found_s of Sexplib0.Sexp.t

Not_found_s is used by functions that historically raised Not_found, to allow them to raise an exception that contains an informative error message (as a sexp), while still having an exception that can be distinguished from other exceptions.

Sourceexception Of_sexp_error of exn * Sexplib0.Sexp.t

Of_sexp_error (exn, sexp) the exception raised when an S-expression could not be successfully converted to an OCaml-value.

Helpers

Sourceval message : string -> (string * Sexplib0.Sexp.t) list -> Sexplib0.Sexp.t

Helper to build nice s-expressions for error messages. It imitates the behavior of [%message ...] from the ppx_sexp_message rewriter.

message name key_values produces a s-expression list starting with atom name and followed by list of size 2 of the form (key value). When the key is the empty string, value is used directly instead as for [%message].

For instance the following code:

  Sexp.message "error"
    [ "x", sexp_of_int 42
    ; "" , sexp_of_exn Exit
    ]

produces the s-expression:

  (error (x 42) Exit)

Defaults

Sourceval default_indent : int Stdlib.ref

default_indent reference to default indentation level for human-readable conversions.

Initialisation value: 2.

Pretty printing of S-expressions

pp_hum ppf sexp outputs S-expression sexp to formatter ppf in human readable form.

Sourceval pp_hum_indent : int -> Stdlib.Format.formatter -> Sexplib0.Sexp.t -> unit

pp_hum_indent n ppf sexp outputs S-expression sexp to formatter ppf in human readable form and indentation level n.

pp_mach ppf sexp outputs S-expression sexp to formatter ppf in machine readable (i.e. most compact) form.

Same as pp_mach.

Conversion to strings

Sourceval to_string_hum : ?indent:int -> Sexplib0.Sexp.t -> string

to_string_hum ?indent sexp converts S-expression sexp to a string in human readable form with indentation level indent.

  • parameter indent

    default = !default_indent

Sourceval to_string_mach : Sexplib0.Sexp.t -> string

to_string_mach sexp converts S-expression sexp to a string in machine readable (i.e. most compact) form.

Sourceval to_string : Sexplib0.Sexp.t -> string

Same as to_string_mach.

Styles

Sourceval of_float_style : [ `Underscores | `No_underscores ] Stdlib.ref
Sourceval of_int_style : [ `Underscores | `No_underscores ] Stdlib.ref
Sourceval invariant : Base.Sexp.t -> unit
Sourceval of_string : unit

Base has never had an of_string function. We expose a deprecated of_string here so that people can find it (e.g. with merlin), and learn what we recommend. This of_string has type unit because we don't want it to be accidentally used.

  • deprecated [since 2018-02] Use [Parsexp.Single.parse_string_exn]
include Base.Comparable.S with type t := Base.Sexp.t
include Base.Comparisons.S with type t := Base.Sexp.t
include Base.Comparisons.Infix with type t := Base.Sexp.t
Sourceval (>=) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval (<=) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval (=) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval (>) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval (<) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval (<>) : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval equal : Base.Sexp.t -> Base.Sexp.t -> bool
Sourceval compare : Base.Sexp.t -> Base.Sexp.t -> int

compare t1 t2 returns 0 if t1 is equal to t2, a negative integer if t1 is less than t2, and a positive integer if t1 is greater than t2.

Sourceval ascending : Base.Sexp.t -> Base.Sexp.t -> int

ascending is identical to compare. descending x y = ascending y x. These are intended to be mnemonic when used like List.sort ~compare:ascending and List.sort ~cmp:descending, since they cause the list to be sorted in ascending or descending order, respectively.

Sourceval descending : Base.Sexp.t -> Base.Sexp.t -> int
Sourceval between : Base.Sexp.t -> low:Base.Sexp.t -> high:Base.Sexp.t -> bool

between t ~low ~high means low <= t <= high

Sourceval clamp_exn : Base.Sexp.t -> min:Base.Sexp.t -> max:Base.Sexp.t -> Base.Sexp.t

clamp_exn t ~min ~max returns t', the closest value to t such that between t' ~low:min ~high:max is true.

Raises if not (min <= max).