anchor.diff:  
   (defvar *id*)
   
  -(defclass graph ()
  -  ((attributes :initform nil :initarg :attributes :accessor attributes-of)
  -   (nodes :initform nil :initarg :nodes :accessor nodes-of)
  +(defclass attributes-mixin ()
  +  ((attributes :initform nil :initarg :attributes :accessor attributes-of)))
  +
  +(defclass graph (attributes-mixin)
  +  ((nodes :initform nil :initarg :nodes :accessor nodes-of)
      (edges :initform nil :initarg :edges :accessor edges-of)))
   
  -(defclass node ()
  -  ((attributes :initform nil :initarg :attributes :accessor attributes-of)
  -   (id :initform (incf *id*) :initarg :id :accessor id-of))
  +(defclass node (attributes-mixin)
  +  ((id :initform (incf *id*) :initarg :id :accessor id-of))
     (:documentation "A graph node with `dot` attributes (a plist, initarg
   :ATTRIBUTES) and an optional `dot` id (initarg :ID, autogenerated
   by default)."))
  
positive.code:   (print-unreadable-object (object stream :type t :identity t)
      (format stream "~A" (object-of object))))
  
  (defclass edge (port-mixin)
    ((attributes :initform nil :initarg :attributes :accessor attributes-of)
     (source :initform nil :initarg :source :accessor source-of)
     (target :initform nil :initarg :target :accessor target-of)))
  
  ;;; Protocol functions
  
negative.code:   ((source-port :initform nil :initarg :source-port :accessor source-port-of)
     (target-port :initform nil :initarg :target-port :accessor target-port-of)))
  
  (defclass attributed (attributes-mixin
                        port-mixin)
    ((object :initarg :object :accessor object-of))
    (:documentation "Wraps an object (initarg :OBJECT) with `dot` attribute
  information (a plist, initarg :ATTRIBUTES)"))
  
  