anchor.diff:                                          (intern (format nil "MAKE-~a" n)
                                                   (symbol-package n)))
                                         types)))
  -      (when (> (length types) (length (remove-duplicates types)))
  -        (error "multiple slots found with the same type, this is not allowed in def-input-kind"))
         `(progn
            (deftclass (,name (:constructor ,constructor)
                              (:conc-name nil))
  
positive.code: 		       (let* ((acc (intern (format nil "~a-~a" kind slot)
  					  (symbol-package kind)))
  			      (pred
  			       `(eq (event-source-container-kind ,event-var)
  				    ',kind)))
  			 `((,name (&optional index)
  				  (if index
  				      `(,',acc ,',kind index)
  
negative.code:                                  `(defmethod add ((inst ,name) (source ,x))
  				    (let ((arr (,a inst)))
  				      (,push source arr)
  				      (%set-container
  				       source (,ls inst) ',o
  				       (position source arr)))))))
                             types
                             hidden-slot-names
                             lengths
  			   listener-slot-names
  			   original-slot-names))
  	 (defmethod remove-listener ((listener predicate-source) (input ,name))
  	   ,@(loop :for l :in listener-slot-names :collect
  		`(shifting-remove (,l input) listener *null-listener*))
  