# Module BatUref

    module BatUref: sig .. end

Unifiable references using destructive union-find

    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 `BatUref.unite`d.

###### Printing

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

Print the uref.