BatUrefUnifiable references using destructive union-find
type 'a t = 'a urefA synonym for convenience
val uref : 'a -> 'a urefuref x allocates a new uref and places the value x in it.
val uget : 'a uref -> 'auget ur returns the value stored in the uref ur.
val uset : 'a uref -> 'a -> unituset ur x updates the contents of ur with x.
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.
equal ur1 ur2 returns true iff ur1 and ur2 are equal urefs, either because they are physically the same or because they have been united.
val print : ('a, 'b) BatIO.printer -> ('a uref, 'b) BatIO.printerPrint the uref.