sig
  type 'a t
  val create : int -> 'Union.t
  val add : 'Union.t -> '-> unit
  val find : 'Union.t -> '-> 'a
  val union : 'Union.t -> '-> '-> 'a
  val extract : 'Union.t -> 'a list list
end