module type UnionFind = sig type t val create : int -> t val find : t -> int -> int val union : t -> int -> int -> t end module type PersistentArray = sig type t val create : int -> int -> t val init : int -> (int -> int) -> t val get : t -> int -> int val set : t -> int -> int -> t end module type PolyPersistentArray = sig type 'a t val create : int -> 'a -> 'a t val init : int -> (int -> 'a) -> 'a t val get : 'a t -> int -> 'a val set : 'a t -> int -> 'a -> 'a t end