anchor.diff:  	  (format t "new seq: ~A~%" new-seq)
   	  (format t "copied cursors: ~A~%" new-cursors)
   	  (format t "substituted cursor: ~A~%" sub-cursors)
  -	  (%pack-cursor-tree
  -	   (apply #'cursor/cat sub-cursors)
  -	   :phase (1+ phase)))
  +	  (values
  +	   (%pack-cursor-tree
  +	    (apply #'cursor/cat sub-cursors)
  +	    :phase (1+ phase))
  +	   t))
   	(if (next-method-p)
   	    (call-next-method cat)
  -	    cat))))
  +	    (values cat nil)))))
   
   
   
  
positive.code: ;;;; the simple parser we have for cursor expressions.
  ;;;; This is a method based upoin the cursor type.
  ;;;; by default we do nothing and just reutnr the original cursor
  (defmethod %pack-cursor-tree ( cursor &key &allow-other-keys )
    cursor)
  
  
negative.code: ;;;; This should be chained in a call to call-next-method
  (defmethod %pack-cursor-tree ( (comp composing-cursor-t) &key )
    (format t "composing pack called: ~A~%" comp)
    (let ((any-changes nil))
      (replace 
       (original-cursors comp)
       (mapcar #'(lambda (x)
  		 (multiple-value-bind (packed changed-p)
  		     (%pack-cursor-tree x)
  		   (when changed-p
  		     (setf any-changes t))
  		   packed))
  	     (original-cursors comp)))
      (if any-changes
  	(%pack-cursor-tree comp)
  	(values
  	 comp
  	 nil))))
  
  ;;=========================================================================
  
  