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