anchor.diff:              :read-only t
               ,@args))))))
   
  -(defmacro defstruct-read-only (name-and-opts &body slots
  -                               &environment env)
  +;;; Why not allow `defstruct-read-only' to use inheritance? I would
  +;;; like to, but I haven't figured out yet how to make it work
  +;;; reliably. The point of `defstruct-read-only' is that when you see
  +;;; it you know *for sure* that the instances are immutable -- that
  +;;; all the slots are read-only. But where there is inheritance, there
  +;;; are no guarantees. Even if we could check that the class being
  +;;; inherited from has only read-only slots at the time the initial
  +;;; definition, there is nothing to prevent the superclass from being
  +;;; redefined in the future.
  +
  +(defmacro defstruct-read-only (name-and-opts &body slots)
     "Easily define a defstruct with no mutable slots.
   
   The syntax of `defstruct-read-only' is as close as possible to that of
  
positive.code: 
  There are only a few syntactic differences:
  
  1. A structure defined using `defstruct-read-only' may only inherit
     from other structures defined using `defstruct-read-only'.
  
  2. The `:type' option may not be used.
  
  
negative.code:                  :type clause))
          (multiple-value-bind (include-clause opts)
              (if-let (clause (find :include opts :key #'car-safe))
                (values clause (remove clause opts))
                (values nil opts))
            `(defstruct (,name (:copier nil)
                               ,@opts
  