sig
type ('a, 'b) enum = { start : unit -> 'a; step : 'a -> ('b * 'a) option; }
val enum_of_interval : int -> int -> (int, int) JoinPool.Simple.enum
val enum_of_list : 'a list -> ('a list, 'a) JoinPool.Simple.enum
type ('a, 'b, 'c) t = {
register : ('a -> 'b) Join.chan;
wait : unit -> 'c;
}
val create :
('a, 'b) JoinPool.Simple.enum ->
('c -> 'd -> 'd) -> 'd -> ('b, 'c, 'd) JoinPool.Simple.t
end