anchor.diff: -(in-package #:sicl-compiler-types)
  +(cl:in-package #:sicl-compiler-types)
   
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;
  
positive.code:     
  (defun type-map-diff (type-map-1 type-map-2)
    (let ((result (make-hash-table :test #'eq)))
      (maphash (lambda (key descriptor1)
  	       (let ((descriptor2 (gethash key type-map-2)))
  		 (setf (gethash key result)
  		       (type-descriptor-diff
  			descriptor1
  			(if (null descriptor2)
  			    (make-t-type-descriptor)
  			    descriptor2)))))
  	     type-map-1)
      (maphash (lambda (key descriptor2)
  	       (let ((descriptor1 (gethash key type-map-1)))
  		 (when (null descriptor1)
  		   (setf (gethash key result)
  			 (type-descriptor-diff
  			  (make-t-type-descriptor)
  			  descriptor2)))))
  	     type-map-2)
      result))
  
negative.code:     :others-descriptor (others-diff (others-descriptor descriptor1)
  			            (others-descriptor descriptor2))))
  
  (defun type-descriptor-equal (type-descriptor-1 type-descriptor-2)
    (and (equal (rational-descriptor type-descriptor-1)
  	      (rational-descriptor type-descriptor-2))
         (equal (short-float-descriptor type-descriptor-1)
  	      (short-float-descriptor type-descriptor-2))
         (equal (single-float-descriptor type-descriptor-1)
  	      (single-float-descriptor type-descriptor-2))
         (equal (double-float-descriptor type-descriptor-1)
  	      (double-float-descriptor type-descriptor-2))
         (equal (long-float-descriptor type-descriptor-1)
  	      (long-float-descriptor type-descriptor-2))
         (equal (complex-descriptor type-descriptor-1)
  	      (complex-descriptor type-descriptor-2))
         (equal (character-descriptor type-descriptor-1)
  	      (character-descriptor type-descriptor-2))
         (equal (cons-descriptor type-descriptor-1)
  	      (cons-descriptor type-descriptor-2))
         (equal (array-t-descriptor type-descriptor-1)
  	      (array-t-descriptor type-descriptor-2))
         (equal (array-single-float-descriptor type-descriptor-1)
  	      (array-single-float-descriptor type-descriptor-2))
         (equal (array-double-float-descriptor type-descriptor-1)
  	      (array-double-float-descriptor type-descriptor-2))
         (equal (array-character-descriptor type-descriptor-1)
  	      (array-character-descriptor type-descriptor-2))
         (equal (array-bit-descriptor type-descriptor-1)
  	      (array-bit-descriptor type-descriptor-2))
         (equal (array-unsigned-byte-8-descriptor type-descriptor-1)
  	      (array-unsigned-byte-8-descriptor type-descriptor-2))
         (equal (array-unsigned-byte-32-descriptor type-descriptor-1)
  	      (array-unsigned-byte-32-descriptor type-descriptor-2))
         (equal (array-signed-byte-32-descriptor type-descriptor-1)
  	      (array-signed-byte-32-descriptor type-descriptor-2))
         (equal (array-unsigned-byte-64-descriptor type-descriptor-1)
  	      (array-unsigned-byte-64-descriptor type-descriptor-2))
         (equal (array-signed-byte-64-descriptor type-descriptor-1)
  	      (array-signed-byte-64-descriptor type-descriptor-2))
         (equal (null-descriptor type-descriptor-1)
  	      (null-descriptor type-descriptor-2))
         (null (set-exclusive-or (others-descriptor type-descriptor-1)
  			       (others-descriptor type-descriptor-1)))))
         
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  ;;; Canonicalization.
  