sig
type key
type ('a, 'b, 'c) t = {
enter : 'a -> JoinCount.Monitor.key;
leave : JoinCount.Monitor.key * 'b -> unit;
is_pending : JoinCount.Monitor.key -> bool;
get_pendings : unit -> (JoinCount.Monitor.key * 'a) list;
wait : unit -> 'c;
finished : unit Join.chan;
}
val create : ('b -> 'c -> 'c) -> 'c -> ('a, 'b, 'c) JoinCount.Monitor.t
end