anchor.diff:  ;;;; 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)
  -  (replace 
  -   (original-cursors comp)
  -   (mapcar #'%pack-cursor-tree (original-cursors comp)))
  -  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))))
   
   ;;=========================================================================
   
  
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: 	  (format t "new seq: ~A~%" new-seq)
  	  (format t "copied cursors: ~A~%" new-cursors)
  	  (format t "substituted cursor: ~A~%" sub-cursors)
  	  (values
  	   (%pack-cursor-tree
  	    (apply #'cursor/cat sub-cursors)
  	    :phase (1+ phase))
  	   t))
  	(if (next-method-p)
  	    (call-next-method cat)
  	    (values cat nil)))))
  
  
  
  