anchor.diff:        (equalp (value a)
                 (value b))))
   
  -(defun entry-equal-data-p (entry data)
  +(defun data-equal-entry-p (data entry)
     (if (key entry)
         (equalp (funcall (key entry) (value entry))
                 (funcall (key entry) data))
  
positive.code: should return non-nil.")
     (current nil
              :type (or null node)
              :initform nil
              :documentation "The current node.
  It's updated every time a node is visited."))
    (:export-class-name-p t)
    (:export-accessor-names-p t)
    (:accessor-name-transformer #'class*:name-identity)
  
negative.code: 
  If there is no current element, this creates the first element of the tree.
  If CREATOR is provided, set the `creator' slot of OWNER."
    (let ((owner (current-owner history)))
      (cond
        ((null (current owner))
         (let ((new-node (make-node :data data)))
           (setf (origin owner) new-node
                 (creator owner) creator)
           (visit owner new-node)))
        ((not (data-equal-entry-p data (entry (current owner))))
         (let ((node (find-child data owner)))
           (if node
               (setf (value (entry node)) data)
               (let ((maybe-new-entry (add-entry history data)))
                 (push (setf node (make-node :entry maybe-new-entry
                                             :parent (current owner)))
                       (children (current owner)))))
  