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 :
('d, 'a) JoinPool.Simple.enum ->
('b -> 'c -> 'c) -> 'c -> ('a, 'b, 'c) JoinPool.Simple.t
end