`type 'a t = 'a Stdlib.ref`

The type of references.

`val ref : 'a -> 'a Stdlib.ref`

Return a fresh reference containing the given value.

`val (!) : 'a Stdlib.ref -> 'a`

`!r` returns the current contents of reference `r`. Equivalent to `fun r -> r.contents`.

`val (:=) : 'a Stdlib.ref -> 'a -> unit`

`r := a` stores the value of `a` in reference `r`. Equivalent to `fun r v -> r.contents <- v`.

`val set : 'a Stdlib.ref -> 'a -> unit`

As `:=`

`val get : 'a Stdlib.ref -> 'a`

As `!`

`val copy : 'a Stdlib.ref -> 'a Stdlib.ref`

`copy r` returns a new reference with the same initial content as `r`.

`val pre : 'a Stdlib.ref -> ('a -> 'a) -> 'a`

Perform an operation on a reference and return the new value of that reference.

For instance, if `x` is a reference to `1`, `pre x ( ( + ) 1)` returns `2` and sets `x` to `2`.

`val post : 'a Stdlib.ref -> ('a -> 'a) -> 'a`

Perform an operation on a reference and return the previous value of that reference.

For instance, if `x` is a reference to `1`, `post x ( ( + ) 1)` returns `1` and sets `x` to `2`.

`val swap : 'a Stdlib.ref -> 'a Stdlib.ref -> unit`

`swap a b` puts `!b` in `a` and `!a` in `b`

`val post_incr : int Stdlib.ref -> int`

Increment an integer, return the old value.

Comparable to C or Java's `i++`.

`val post_decr : int Stdlib.ref -> int`

Decrement an integer, return the old value.

Comparable to C or Java 's `i--`.

`val pre_incr : int Stdlib.ref -> int`

Increment an integer, return the new value.

Comparable to C or Java's `++i`.

`val pre_decr : int Stdlib.ref -> int`

Increment an integer, return the new value.

Comparable to C or Java's `--i`.

`val protect : 'a Stdlib.ref -> 'a -> (unit -> 'b) -> 'b`

Assign a reference temporarily.

`protect r v body` sets the value of `r` to `v` and executes `body`. Once body has been executed, whether termination happens as a consequence of regular evaluation or exception, the previous value of `r` is restored.

`val toggle : bool Stdlib.ref -> unit`

Invert the boolean stored in the reference

`val oset : 'a option Stdlib.ref -> 'a -> unit`

Set the given option ref to `Some x`

`val oget_exn : 'a option Stdlib.ref -> 'a`

Get a value from an option ref;

- raises `Not_found`

  on `oget_exn (ref None)`

## Boilerplate code

`val print : ('b BatInnerIO.output -> 'a -> unit) -> 'b BatInnerIO.output -> 'a t -> unit`

Given a printing function for the value in the ref, produce a printing function for the ref.

Example: `IO.to_string (Ref.print Int.print) (ref 20) = "20"`

`val compare : 'a BatOrd.comp -> 'a Stdlib.ref BatOrd.comp`

Given a comparison function, produce a comparison function for refs of that type.

Example: `let a = ref 10 and b = ref 20 in Ref.compare Int.compare a b = -1`

`val ord : 'a BatOrd.ord -> 'a Stdlib.ref BatOrd.ord`

Given an ordering function, produce an ordering function for refs of that type.

Example: `let a = ref 10 and b = ref 20 in Ref.ord Int.ord a b = Ord.Lt`

`val eq : 'a BatOrd.eq -> 'a Stdlib.ref BatOrd.eq`