anchor.diff:    (make-weak-hash-table :test #'eq :weakness :key))
   
   (defun allocate-message ()
  -  (let ((message (%make-message)))
  +  (let ((%message (%make-message)))
       (aprog1 (lambda (&rest args)
  -              (apply (%message-function message) args))
  -      (setf (gethash it *funcallable-messages*) message))))
  +              (apply (%message-function %message) args))
  +      (setf (gethash it *funcallable-messages*) %message
  +            (%message-message %message)         it))))
   
   (macrolet ((with-%message ((name message) &body body)
                (with-gensyms (foundp)
  
positive.code: 
  (set-pprint-dispatch 'message #'pprint-message)
  
  ;;;
  ;;; Erfun Cache
  ;;;
  
negative.code: (defstruct (%message
               (:constructor %make-message ())
               (:predicate %messagep))
    name function message
    (erfun-cache (make-hash-table :test #'equal))
    (replies nil :type list)
    (documentation nil :type (or string null))
  