anchor.diff:             :abort   (warn "lparallel: Worker replacement failed! ~
                              Kernel is defunct."))))))
   
  -(defun worker-loop (kernel worker)
  +(defun/type worker-loop (kernel worker) (kernel worker) t
     ;; All implementations tested so far execute unwind-protect clauses
     ;; when the ABORT restart is invoked (TERMINATE-THREAD in SBCL),
     ;; including ABCL.
  
positive.code:          (lambda () ,@body))))
  
  (defun/type/inline make-task (fn) (function) task
    (declare #.*normal-optimize*)
    (make-task-instance :category *task-category* :fn fn))
  
  (defun/type make-channeled-task (channel fn args) (channel function list) t
  
negative.code:   ;;
    ;; This function is inside `call-with-task-handler' (or
    ;; equivalent). Jumping out means a thread abort.
    (declare #.*full-optimize*)
    (let ((scheduler (scheduler kernel)))
      (unwind-protect/ext
         :main  (loop (let ((task (next-task scheduler worker)))
                        (if task
                            (exec-task/worker (the task task) worker)
                            (return))))
         :abort (unless *lisp-exiting-p*
                  (replace-worker kernel worker)))))
  
  