anchor.diff:      (%same-name (write-to-string s1) s2))
     (:method (s1 s2)
       nil))
  +
  +(defgeneric %nonblank (el)
  +  (:method ((el string))
  +    (unless (every (lambda (ch) (char= ch #\Space)) el) el))
  +  (:method ((el (eql :null)))   ; postmodern uses this for NULL fields
  +    nil)
  +  (:method ((el (eql 0)))
  +    nil)
  +  (:method ((el (eql 0.0)))
  +    nil)
  +  (:method ((el (eql nil)))
  +    nil)
  +  (:method ((el array))
  +    (< 0 (length el)))
  +  (:method (el)
  +    el))
   
   (defgeneric fetch-property (map key)
     (:method ((map hash-table) key)
  
positive.code: 
      (or
       (make-or-handler args))
  
      (:round
       (make-simple-function-hadler #'round/closure-template args))
  
negative.code: (defun make-or-handler (args)
    (let ((a (first args))
          (b (second args)))
      (named-lambda or-handler (env)
        (or (%nonblank (funcall a env))
            (%nonblank (funcall b env))))))
  
  (defun make-and-handler (args)
    (let ((a (first args))
          (b (second args)))
      (named-lambda or-handler (env)
        (and (%nonblank (funcall a env))
             (%nonblank (funcall b env))))))
  
  (defun make-not-handler (expr)
    (named-lambda not-handler (env)
      (not (%nonblank (funcall expr env)))))
  
  (defvar *user-functions* nil)
  
  