anchor.diff:  ;;;; Generics
   (defgeneric make-worker (pool &optional id)
     (:documentation "Return a running thread ready to do work for the given pool."))
  +
  +(defgeneric submit (pool job)
  +  (:documentation "Submit a job for execution to the pool"))
   
   ;;;; Lifecycle methods
   (defmethod bind ((pool pool) sub-mask &optional host)
  
positive.code:                             (remove nil (list
                                           (when ,e!success (list :finish ,e!success))
                                           (when ,e!failure (list :fail ,e!failure))))))))
         (setf (gethash ,g!job-id (work ,e!pool)) ,g!job)
         (format t "Sending job: ~S to pool ~S~%" ,g!job-id ,e!pool)
         (zmq:send! (work-sock ,e!pool) ,g!job-id)
         ,g!job-id)))
  
negative.code:                   (let* ((job-id (babel:octets-to-string data))
                           (job (prog1 (gethash job-id (work pool))
                                  (remhash job-id (work pool)))))
  
                      (when (zerop (hash-table-count (work pool)))
                        (format t "Pausing the result gathering socket of ~S~%" pool)
                        (pause (result-sock pool)))
  
                      (if (not job)
                          (format t "WARNING: Receiver could not find job: ~S~%" job-id)
                          (progn
  