anchor.diff:      (setf (gethash "id" copy) id)
       copy))
   
  +;;;; closer-mop helpers
  +
  +(defun slot-definitions (object)
  +  "Return the closer-mop slot-definitions for class of OBJECT."
  +  (closer-mop:compute-slots (class-of object)))
  +
  +(defun slot-name (slot-definition)
  +  "Return SLOT-DEFINITION-NAME of SLOT-DEFINITION."
  +  (closer-mop:slot-definition-name slot-definition))
  +
  +(defun slot-type (slot-definition)
  +  "Return SLOT-DEFINITION-TYPE of SLOT-DEFINITION."
  +  (closer-mop:slot-definition-type slot-definition))
  +
  +;;;; Utility macros
  +
  +(defmacro with-readers ((&rest readers) object &body body)
  +  "Bind the list of symbols in READERS to the current value of the
  +repective reader method, of the same name, invoked on OBJECT.  Then
  +evaluate BODY."
  +  (if (emptyp readers)
  +      `(progn ,@body)
  +      (once-only (object)
  +        `(let (,@(loop for reader in readers
  +                       collect `(,reader (,reader ,object))))
  +           ,@body))))
  +
   ;;;; True utility functions, waiting for a real home
   
   (defun sym (package-name &rest args)
  
positive.code: (in-package :postgres-json)
  
  ;;;; JSON related small functions
  
  
negative.code:                (setf (gethash key new) (ensure-symbol value)))
               hash)
      new))
  (defun sym-prefix (prefix symbol)
    (sym t prefix "-" symbol))
  
  (defun sym-suffix (symbol suffix)
    (sym t symbol "-" suffix))
  