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