anchor.diff:                          slots)
           (class ,class-name))))
   
  -(defmacro generic (name)
  -  #`(identifier ,name generic))
  -
   (defmacro defgeneric (name &rest args)
     #`(progn
         (defvar (generic ,name) (make-generic))
  
positive.code: 
  ;;;; Object system
  
  (defmacro defslot (slot class)
    (let* ((slot-name (symbol-name slot))
           (getter-name (string-concat "." slot-name))
           (setter-name (setter-name getter-name)))
      #`(progn
          (defmethod ,(string-to-symbol getter-name) ((obj ,class))
            (slot-value obj ,(string-to-form slot-name)))
          (defmethod ,(string-to-symbol setter-name) ((obj ,class) value)
            (set-slot-value obj ,(string-to-form slot-name) value)))))
  
  (defmacro class (name)
    #`(identifier ,name class))
  
  (defmacro make (class-name)
    #`(make-instance (class ,class-name)))
  
negative.code:                   (list ,@(params-specializers params))
                    (lambda ,params ,@body))
        #',name))
  
  (defmacro defslot (slot class)
    (let ((setter-name (setter-name (symbol-name slot)))
          (slot-name-form (string-to-form (symbol-name slot))))
      #`(progn
          (defmethod ,slot ((obj ,class))
            (slot-value obj ,slot-name-form))
          (defmethod ,(string-to-symbol setter-name) ((obj ,class) value)
            (set-slot-value obj ,slot-name-form value)))))
  
  ;;;; Fixup class hierarchy
  
  