anchor.diff:                (declare (ignore r))
                 name))))
   
  +  (defun slot-marshall-type (s)
  +    (etypecase s
  +      (symbol nil)
  +      (list (getf s :marshall-type))))
  +
     (defun cat-symbol (symbol &rest rest)
     (intern (format nil "~{~A~}" (mapcar #'symbol-name
                                          (cons symbol rest)))))
  
positive.code:          (json:with-object ()
             ,@(flet ((accessor (field) (cat-symbol name '#:- field)))
                     (loop for s in serialized-slots
                        collect (let ((encode-form `(encode-field ',s (,(accessor s) obj))))
                                  (if (slot-optional-type s :write)
                                      `(when (,(accessor s) obj)
                                         ,encode-form)
  
negative.code:                   (eq (cdr cell) :read-write)))
               (:read-write (eq (cdr cell) :read-write)))))))
  
  ;; TODO: handle packages on e.g. type symbols appropriately (I'm
  ;; looking at you, :marshall-type)
  ;; TODO: See if it's possible to generate docstrings for these things
  (defmacro define-json-obj (name &body body)
    (let* ((slots (if (stringp (first body))
  