anchor.diff:  (defgeneric gettext (input end)
     (:documentation "Get the text between START and END." ))
   
  +(defgeneric copy-input (input)
  +  (:documentation "Make a copy of input that is not EQL to the current input."))
  +
   (defgeneric input-position (input)
     (:documentation "Current position within the input. This is only used for
     informational purposes in tracing output."))
  
positive.code:            (setf (get ',name 'parser-function) t))
           (defun ,name (,@args ,input)
             ,@(when docstring (list docstring))
             ,(compile-and body input (list name) nil))))))
  
  ;;; Compiler ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
  
negative.code:                    (stringp form)
                     (characterp form))
                    (with-gensyms (input)
                      (thunkify (new-compile-form form input names state) input names)))
  
                   ((form-p 'if form) (compile-if (cdr form) #'compile-arg))
                   ((form-p 'trace form) (compile-trace form #'compile-arg))
  