anchor.diff:  should return an expansion from EXPR to a form that will build a new object that
   has NEW-VAL in the place specified by expr.  NTH-ARG marks which argument is
   considered the actual data which will be inverted next."
  -  `(setf
  -    (gethash ',name *modf-expansions*)
  -    (lambda (,expr ,val ,new-val)
  -      ,@body )
  -    (gethash ',name *modf-nth-arg*)
  -    ,nth-arg ))
  +  `(eval-when (:compile-toplevel :load-toplevel :execute)
  +     (setf
  +      (gethash ',name *modf-expansions*)
  +      (lambda (,expr ,val ,new-val)
  +        ,@body )
  +      (gethash ',name *modf-nth-arg*)
  +      ,nth-arg )))
   
   ;; @\section{Rewrite Rules}
   
  
positive.code:   `(progn
       (defmethod ,(intern (modf-name name) :modf) (,new-val ,@args)
         ,@body )
       (setf (gethash ',name *modf-nth-arg*)
             ,nth-arg )))
  
  ;; @\section{The {\em modf} macro}
  
  
negative.code:   "Define a new rewrite rule.  If a form starting with NAME is encountered, call
  the defined function to return a form that we can deal with (i.e. one defined
  via DEFINE-MODF-EXPANDER, DEFINE-MODF-FUNCTION, and DEFINE-MODF-METHOD)."
    `(eval-when (:compile-toplevel :load-toplevel :execute)
       (setf (gethash ',name *modf-rewrites*)
             (lambda (,expr)
               ,@body ))))
  
  ;; @\section{Defining Modf functions and methods}
  
  