base
Full standard library replacement for OCaml
1024" x-on:close-sidebar="sidebar=window.innerWidth > 1024 && true">
package base
-
base
-
-
base.base_internalhash_types
-
base.caml
-
base.md5
-
base.shadow_stdlib
Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
module type S = sig ... end
module type S1 = sig ... end
module type S2 = sig ... end
module type S3 = sig ... end
val invariant :
Caml.Lexing.position ->
'a ->
( 'a -> Sexp.t ) ->
( unit -> unit ) ->
unit
invariant here t sexp_of_t f
runs f ()
, and if f
raises, wraps the exception in an Error.t
that states "invariant failed" and includes both the exception raised by f
, as well as sexp_of_t t
. Idiomatic usage looks like:
invariant [%here] t [%sexp_of: t] (fun () ->
... check t's invariants ... )
For polymorphic types:
let invariant check_a t =
Invariant.invariant [%here] t [%sexp_of: _ t] (fun () -> ... )
It's okay to use [%sexp_of: _ t]
because the exceptions raised by check_a
will show the parts that are opaque at top-level.
check_field
is used when checking invariants using Fields.iter
. It wraps an exception raised when checking a field with the field's name. Idiomatic usage looks like:
type t =
{ foo : Foo.t;
bar : Bar.t;
}
[@@deriving fields]
let invariant t : unit =
Invariant.invariant [%here] t [%sexp_of: t] (fun () ->
let check f = Invariant.check_field t f in
Fields.iter
~foo:(check Foo.invariant)
~bar:(check Bar.invariant))
;;
ON THIS PAGE
No table of contents