sig
  type point
  type 'a state
  val init : unit -> 'a PersistentUnionFind.state
  val create :
    'a ->
    'a PersistentUnionFind.state ->
    PersistentUnionFind.point * 'a PersistentUnionFind.state
  val same :
    PersistentUnionFind.point ->
    PersistentUnionFind.point -> 'a PersistentUnionFind.state -> bool
  val union :
    PersistentUnionFind.point ->
    PersistentUnionFind.point ->
    'a PersistentUnionFind.state -> 'a PersistentUnionFind.state
  val find : PersistentUnionFind.point -> 'a PersistentUnionFind.state -> 'a
  val update :
    ('a -> 'a) ->
    PersistentUnionFind.point ->
    'a PersistentUnionFind.state -> 'a PersistentUnionFind.state
  val union_computed :
    ('a -> 'a -> 'a) ->
    PersistentUnionFind.point ->
    PersistentUnionFind.point ->
    'a PersistentUnionFind.state -> 'a PersistentUnionFind.state
  val iter : ('a -> unit) -> 'a PersistentUnionFind.state -> unit
  val fold :
    ('acc -> PersistentUnionFind.point -> 'a -> 'acc) ->
    'acc -> 'a PersistentUnionFind.state -> 'acc
  val compare : PersistentUnionFind.point -> PersistentUnionFind.point -> int
  val repr :
    PersistentUnionFind.point ->
    'a PersistentUnionFind.state -> PersistentUnionFind.point
  val valid :
    PersistentUnionFind.point -> 'a PersistentUnionFind.state -> bool
end