This is a persistent data structure for equivalence
relations (known in the imperative world as union-find
or disjoint set union). It exhibits optimal performance
when used in a linear pattern, but degrades when other
access patterns are used.
The basic idea is as given by Conchon and Filliatre in
their 2007 paper, "A persistent union-find data
structure." Unlike the implementation given in the
paper, this version is safe with multiple threads, but
does not optimize for backtracking.
Version 0.3 contains some performance improvements for
concurrent applications, and removes the repr function,
which was poorly defined and had no good uses.