anchor.diff:  (import data/function (cut))
   (import compiler (flag?))
   (import data/format (format))
  +(import control/setq (defsetq))
   
   (defun gen-def (name ll body &extra) :hidden
     (case name
  
positive.code:                   `(,(maybe-check (map-name (cut sym.. 'set- nm '- <> '!) name)
                                    nm self)
                      (.<! ,self ,(symbol->string (symb-name name)) ,val))
                    (or docs `nil)))]
        [(mutable ?name ?getter ?setter (optional (string? @ ?docs)))
         (snoc
           (field->def nm (list 'immutable name getter))
  
negative.code:                   (list self val)
                    `(,(maybe-check setter nm self)
                      (.<! ,self ,(symbol->string (symb-name name)) ,val))
                    ':deprecated (format nil "Use the generated (setq ({} ...)) instead" (symb-name setter)) 
                    (or docs `nil))
           (gen-setq-definiton setter nm
                               (maybe-check (map-name (cut sym.. 'set- nm '- <> '!) name) nm self)))])))
  
  (defun make-constructor (docs type-name fields symbol spec) :hidden
    (let* [(lambda-list (map (lambda (x) (symb-name (field-name x))) fields))
  