anchor.diff:                 ,@(loop for reader in readers
                          collect `(,reader self))))
   
  -       (defmethod %constructor-len ((x ,type-name))
  -         ,(length readers))
  -
          ;; Define a comparison method.
          (defmethod %constructor= ((o1 ,type-name) (o2 ,type-name))
            (and ,@(loop for reader in readers
                         collect `(constructor= (,reader o1)
                                                (,reader o2)))))
  -
  -       (defmethod %constructor-ref ((x ,type-name) idx)
  -         (case idx
  -           ,@(loop for i from 0
  -                   for reader in readers
  -                   collect `(,i (,reader x)))
  -           (t (call-next-method))))
   
          (trivia:defpattern ,type-name (&optional ,@slot-names)
            (list
  
positive.code:             (:print-function
               (lambda (object stream depth)
                 (declare (ignore depth))
                 (print-constructor object stream))))
           ,@(unsplice docstring)
           ,@(loop for (slot-name slot-type) in slots
                   collect `(,slot-name :type ,slot-type)))
  
negative.code:   (:method (x y)
      (equal x y)))
  
  (defun print-constructor (object stream fields)
    (let* ((prefix
             ;; "If `*read-eval*' is false and `*print-readably*' is
             ;; true, any method for `print-object' that would output a
             ;; reference to the `#.' reader macro either outputs
  