anchor.diff:          (sources prompter))
     (maybe-funcall (after-destructor prompter))
     ;; TODO: Interrupt before or after destructor?
  +  (calispel:! (sync-interrupt-channel (sync-queue prompter)) t)
     (calispel:! (interrupt-channel prompter) t))
   
   (export-always 'call-follow-mode-function)
  
positive.code:                   :type calispel:channel
                    :export nil
                    :documentation
                    "Communication channel with the `update' thread."))
    (:accessor-name-transformer (hu.dwim.defclass-star:make-name-transformer name))
    (:documentation "This object is used to memorize which sources are ready for a
  given input.
  
negative.code:   "Block and return next PROMPTER ready source.
  It's the next source that's done updating.
  If all sources are done, return t.
  This is unblocked when the PROMPTER is `destroy'ed.
  
  TIMEOUT is deprecated."
    (declare (ignore timeout)) ; Deprecated.
    (when prompter
      ;; We let-bind `sync-queue' here so that it remains the same object throughout
      ;; this function, since the slot is subject to be changed concurrently when
      ;; the input is edited.
      (alex:if-let ((sync-queue (sync-queue prompter)))
        (if (= (length (ready-sources sync-queue))
               (length (sources prompter)))
            t
            (progn
              (log:info "LISTEN" prompter (ready-channel sync-queue))
              (calispel:fair-alt
                ((calispel:? (ready-channel sync-queue) next-source)
                 (log:info "LISTENED" next-source)
                 (cond
                   ((null next-source)
                    nil)
                   (t
                    (push next-source (ready-sources sync-queue))
                    ;; Update selection when update is done:
                    (select-first prompter)
                    next-source)))
                ((calispel:? (sync-interrupt-channel sync-queue))
                 (log:info "LISTENING INTERRUPTED")
                 nil))))
        ;; No sync-queue if no input was ever set.
        t)))
  
  (export-always 'all-ready-p)
  (defun all-ready-p (prompter &optional timeout)
  