sig
  type ('a, 'b) t = {
    enter : unit -> unit;
    leave : 'Join.chan;
    wait : unit -> 'b;
    finished : unit Join.chan;
  }
  val create : ('-> '-> 'b) -> '-> ('a, 'b) JoinCount.Dynamic.t
end