anchor.diff:    (:method ((object list) (type foreign-struct-type) p)
       ;; Iterate over plist, set slots
       (loop for (name value) on object by #'cddr
  -          for slot = (gethash name (slots type))
  -          do (convert-into-foreign-memory
  -              value
  -              (slot-type slot)
  -              (foreign-struct-slot-pointer p slot)))))
  +          do (setf (foreign-slot-value p (unparse-type type) name)
  +                   ;; does this work for aggregate slots?
  +                   (convert-to-foreign
  +                    value
  +                    (slot-type (gethash name (structure-slots type))))))))
   
   (defun convert-into-foreign-memory (value type ptr)
     (let ((ptype (parse-type type)))
  
positive.code: ;;;; -*- Mode: lisp; indent-tabs-mode: nil -*-
  ;;; Time-stamp: <2011-09-28 23:50:21EDT structures.lisp>
  ;;;
  ;;; strings.lisp --- Operations on foreign strings.
  ;;;
  
negative.code:   ;; Iterate over slots, make plist
    (let ((plist (list)))
      (loop for slot being the hash-value of (structure-slots type)
            for name = (slot-name slot)
            do (setf
                (getf plist name)
                (foreign-struct-slot-value p slot)))
      plist))
  
  (defmethod free-translated-object (value (p foreign-struct-type) freep)
  