anchor.diff:    (let ((channel (gensym "CHANNEL-"))
           (recipient (gensym "RECIPIENT-"))
           (packet (gensym "PACKET-"))
  -        (loop-var (gensym "LOOP-VAR-"))
  -        (list-of-packets (gensym "LIST-OF-PACKETS-"))
           (return-list (gensym "RETURN-LIST-"))
           (channel-type name)
           (recipient-type (extend-symbol name "-RECIPIENT"))
  
positive.code:             :initform nil)))
  (defchannel-decoder channel (ch rc pk)
    (setf (payload-of pk) (unserialize :payload)
          (recipient-of rc) pk)
    (return-packet pk))
  
  (defclass channel-packet ()
  
negative.code:     `(defmethod channel-decoder ((,channel ,channel-type)
                                   (,recipient ,recipient-type)
                                   (,packet ,packet-type))
         (let ((,return-list nil))
           (flet ((return-packet (packet)
                    (check-type packet ,packet-type)
                    (push packet ,return-list)))
             (labels ,(loop :for prev = nil :then name
                            :for name :in (reverse component-names)
                            :collecting (%make-decoder-local-func channel
                                                                  name
                                                                  prev))
               (,(first component-names) ,channel ,recipient ,packet)
               (nreverse ,return-list)))))))
  
  (defclass d1-d2-channel-recipient () ())
  (defclass d1-d2-channel-packet () ())
  (%create-decoder d1-d2-channel (d1 d2 channel))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  