type 'a bucket = | Job of 'a| Wait| Done
type 'a next = unit -> 'a bucketval of_list : 'a list -> 'a list bucketval make : num_workers:int -> 'a list -> 'a list nexttype 'a of_n = {work : 'a;bucket : int;total : int;
}val make_n_buckets : buckets:int -> split:(bucket:int -> 'a) -> 'a of_n next