anchor.diff:                   `(:setup-function ,setup-function)
                    '())
              ,@(if explicit-cleanup-function
  -                 `(:cleanup-function ,cleanup-function)
  -                 '())
  +                `(:cleanup-function ,cleanup-function)
  +                '())
  +           ,@(if explicit-changed-callback
  +                `(:changed-callback ,changed-callback)
  +                '())
              ,@(if explicit-empty-complete-immediate
                    `(:empty-complete-immediate ,empty-complete-immediate)
                    '())
  
positive.code:                           (callback-buffer nil explicit-callback-buffer)
                            (setup-function nil explicit-setup-function)
                            (cleanup-function nil explicit-cleanup-function)
                            (empty-complete-immediate nil explicit-empty-complete-immediate)
                            (input-prompt nil explicit-input-prompt)
                            (input-buffer nil explicit-input-buffer)
  
negative.code:                      :initform nil
                       :documentation "Function run after a completion has been selected.
  This should not rely on the minibuffer's content.")
     (changed-callback :initarg :changed-callback
                       :accessor changed-callback
                       :initform nil
                       :documentation "Function to call whenever a change happens.")
     (empty-complete-immediate :initarg :empty-complete-immediate :accessor empty-complete-immediate ; TODO: Rename?
                               :initform nil
                               :documentation "If non-nil, allow input matching no)))
  candidates.")
     ;; TODO: Move input-* slots to a separate text class?
     (input-prompt :initarg :input-prompt :accessor input-prompt :initform "Input"
  