newtype Ref, RefMap, RefSet in Data.OpaqueRef
OpaqueRef and UnionFind are protected by phantom type