sig
  type elt
  type collection
  type ('partial, 'result) t = {
    register :
      (JoinPool.Shared.S.elt, 'partial) JoinPool.Shared.worker Join.chan;
    register_interruptible :
      ((JoinPool.Shared.S.elt, 'partial) JoinPool.Shared.interruptible_worker *
       JoinPool.Shared.kill)
      Join.chan;
    fold :
      JoinPool.Shared.S.collection ->
      ('partial -> 'result -> 'result) -> 'result -> 'result;
  }
  val create : unit -> ('partial, 'result) JoinPool.Shared.S.t
end