anchor.diff:  
   
   (defun expand-type-definitions (prefix &optional args)
  -  (flet ((type-options (type-number)
  + (flet ((type-options (type-number)
   	   (let ((name (find-type-name type-number)))
   	     (cdr (assoc name args :test #'string=)))))
   
  -    (let ((type-list
  -	   (delete-if
  -	    #'(lambda (type-number)
  -		(let ((name (find-type-name type-number)))
  -		  (or
  -		   (getf (type-options type-number) :ignore)
  -		   (find-if
  -		    #'(lambda (options)
  -			(and
  -			 (string-prefix-p (first options) name)
  -			 (getf (cdr options) :ignore-prefix)))
  -		    args))))
  -	    (find-types prefix))))
  +   (let ((type-list
  +	  (delete-if
  +	   #'(lambda (type-number)
  +	       (let ((name (find-type-name type-number)))
  +		 (or
  +		  (getf (type-options type-number) :ignore)
  +		  (find-if
  +		   #'(lambda (options)
  +		       (and
  +			(string-prefix-p (first options) name)
  +			(getf (cdr options) :ignore-prefix)))
  +		   args))))
  +	   (find-types prefix))))
                
  -      (dolist (type-number type-list)
  -	(let ((name (find-type-name type-number)))
  -	  (register-type
  -	   (getf (type-options type-number) :type (default-type-name name))
  -	   type-number)))
  -
  -      `(progn
  -	 ,@(mapcar
  -	    #'expand-type-definition
  -	    (%sort-types-topologicaly type-list))))))
  -	    
  +     (dolist (type-number type-list)
  +       (let ((name (find-type-name type-number)))
  +	 (register-type
  +	  (getf (type-options type-number) :type (default-type-name name))
  +	  type-number)))
  +    
  +     `(progn
  +	,@(mapcar
  +	   #'(lambda (type)
  +	       (expand-type-definition type (type-options type)))
  +	   (%sort-types-topologicaly type-list))))))
  +
   (defmacro define-types-by-introspection (prefix &rest args)
     (expand-type-definitions prefix args))
  +
  +
  +
  
positive.code: 
  ;;;; 
  
  (defvar *derivable-type-info* ())
  
  (defun register-derivable-type (type id &key query expand)
    (register-type type id)
    (let* ((type-number (register-type type id))
  	 (info (assoc type-number *derivable-type-info*)))
      (if info
  	(setf (cdr info) (list query expand))
        (push
         (list type-number query expand)
         *derivable-type-info*))))
  
  (defun find-type-info (type)
    (dolist (super (cdr (type-hierarchy type)))
      (let ((info (assoc super *derivable-type-info*)))
        (return-if info))))
  
  (defun type-dependencies (type)
    (let ((query (second (find-type-info type))))
      (when query
        (funcall query (find-type-number type t)))))
  
  (defun expand-type-definition (type)
    (let ((expander (third (find-type-info type))))
      (funcall expander (find-type-number type t))))
  
  (defbinding type-parent (type) type-number
    ((find-type-number type t) type-number))
  
negative.code: ;; License along with this library; if not, write to the Free Software
  ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  
  ;; $Id: gtype.lisp,v 1.12 2001-10-21 21:50:18 espen Exp $
  
  (in-package "GLIB")
  
  