anchor.diff:             (with-slots ,(mapcar #'car bindings) instance
                ,@body)))
   
  +       (make-instances-obsolete ',sketch-name)
  +
          (find-class ',sketch-name))))
  
positive.code:                                                            ,value)
                                                        `(or (getf initargs ,(alexandria:make-keyword name)) ,value)))))
                                     (replace-channels-with-values bindings)))
                      (declare (ignorable ,@(mapcar #'car *default-slots*)))
                      ,(make-window-parameter-setf)
                      ,(make-custom-slots-setf sketch-name (custom-bindings bindings)))
                    (setf (env-y-axis-sgn (slot-value instance '%env))
                          (if (eq (slot-value instance 'y-axis) :down) +1 -1)))
  
         (when ,redefines-sketch-p
           (defclass ,sketch-name (sketch)
             ,(sketch-bindings-to-slots `,sketch-name bindings)))
  
         (defmethod draw ((instance ,sketch-name) &key &allow-other-keys)
           (with-accessors ,(mapcar (lambda (x) (list (car x) (intern-accessor (car x))))
  
negative.code:                        (,(intern-accessor (car slot)) instance)))
                     *default-slots*)))
  
  (defun custom-slots (bindings)
    (loop
       for b in (mapcar #'car bindings)
       if (not (member b *default-slots*))
       collect b))
  
  ;;; DEFSKETCH macro
  
  (defmacro defsketch (sketch-name bindings &body body)
    (let ((default-not-overridden
            (remove-if (lambda (x) (find x bindings :key #'car))
                       (mapcar #'car *default-slots*))))
      `(progn
         (defclass ,sketch-name (sketch)
           ,(sketch-bindings-to-slots `,sketch-name bindings))
  
         ,@(remove-if-not #'identity (make-channel-observers sketch-name bindings))
  
  