functor (C : Config->
  functor (E : Enumerable->
    sig
      type elt = E.elt
      type collection = E.t
      type ('a, 'b) t = {
        register : (elt, 'a) worker Join.chan;
        register_interruptible :
          ((elt, 'a) interruptible_worker * kill) Join.chan;
        fold : collection -> ('-> '-> 'b) -> '-> 'b;
      }
      val create : unit -> ('a, 'b) t
    end