anchor.diff:  		  (funcall callback bag item))
   	       bag)
   
  +	     (defun ,add-item-at (bag item index)
  +	       (let ((len (length (,items bag))))
  +		 (if (> index len)
  +		     (progn
  +		       (%add-n-holes bag (1+ (- index len)))
  +		       (%insert-item-at bag item index))
  +		     (%insert-item-at bag item index))
  +		 bag))
  +
  +	     (defun ,remove-item-at (bag index)
  +	       (declare (,bag-type bag) (fixnum index))
  +	       (let ((item (aref (,items bag) index)))
  +		 (if item
  +		     (progn
  +		       (%remove-item-from-cache bag index)
  +		       (push index (,holes-in-items bag))
  +		       (loop :for rummager :across (,rummagers bag) :do
  +			  (%parent-on-removed rummager item))
  +		       (loop :for callback :across (,removed-callbacks bag) :do
  +			  (funcall callback bag item))
  +		       bag)
  +		     (error "No item ~s in bag ~s" item bag))))
  +
  +	     (defun ,has-item-at (bag index)
  +	       (declare (,bag-type bag) (fixnum index))
  +	       (not (null (aref (,items bag) index))))
  +
   	     (defun ,remove-item (bag item &optional (error-if-missing t))
   	       (declare (,bag-type bag) (,element-type item)
   			(boolean error-if-missing))
   	       (let ((pos (position item (,items bag) :test #'eq)))
   		 (if pos
  -		     (progn
  -		       (%remove-item-from-cache bag pos)
  -		       (push pos (,holes-in-items bag))
  -		       (loop :for rummager :across (,rummagers bag) :do
  -			  (%parent-on-removed rummager item))
  -		       (loop :for callback :across (,removed-callbacks bag) :do
  -			  (funcall callback bag item))
  -		       bag)
  +		     (,remove-item-at bag pos)
   		     (when error-if-missing
   		       (error "No item ~s in bag ~s" item bag)))))
   
  
positive.code: 		      (make-array 0 :element-type '(function (,bag-type ,element-type) t)
  				  :adjustable t :fill-pointer 0))
  
  		    (%remove-item-from-cache (bag pos-in-item-array)
  		      (declare (,bag-type bag) (fixnum pos-in-item-array))
  		      (let* ((item-cache (,item-cache bag))
  
negative.code: 	   (rummagers (symb bag-type '-rummagers))
  	   (predicate (symb rummager-type '-predicate))
  	   (add-item (symb 'add-item-to- element-type '-bag))
  	   (add-item-at (symb 'add-item-to- element-type '-bag-at))
  	   (remove-item (symb 'remove-item-from- element-type '-bag))
  	   (remove-item-at (symb 'remove-item-from- element-type '-bag-at))
  	   (has-item-at (symb 'has-item-in- element-type '-bag-at))
  	   (remove-all (symb 'remove-all-from- element-type '-bag))
  	   (init (symb 'bag-of- element-type '!))
  	   (start-rummaging (symb 'rummage- element-type '-bag))
  