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 ==
. By default,
uget ur2sel
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.
val print : ('a, 'b) BatIO.printer -> ('a uref, 'b) BatIO.printer
Print the uref.