`type 'a uref`

A `t uref` is a reference to a cell that contains a value of type `t`.

`type 'a t = 'a uref`

A synonym for convenience

`val uref : 'a -> 'a uref`

`uref x` allocates a new uref and places the value `x` in it.

`val uget : 'a uref -> 'a`

`uget ur` returns the value stored in the uref `ur`.

`val uset : 'a uref -> 'a -> unit`

`uset ur x` updates the contents of `ur` with `x`.

`val unite : ?sel:('a -> 'a -> 'a) -> 'a uref -> 'a uref -> unit`

`unite ~sel ur1 ur2` unites the urefs `ur1` and `ur2`, selecting the result of `sel (uget ur1) (uget ur2)` for the contents of the resulting united uref. After this operation, `uget ur1 == uget ur2`. By default, `sel` is `fun x _y -> x`.

`val equal : 'a uref -> 'a uref -> bool`

`equal ur1 ur2` returns `true` iff `ur1` and `ur2` are equal urefs, either because they are physically the same or because they have been `unite`d.

## Printing

`val print : ('a, 'b) BatIO.printer -> ('a uref, 'b) BatIO.printer`

Print the uref.