anchor.diff:                     (stringp form)
                      (characterp form))
                     (with-gensyms (input)
  -                    (thunkify (new-compile-form form input names state) input names)))
  +                    (thunkify (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))
  
positive.code: binding."
    (with-gensyms (input)
      (destructuring-bind ((name &rest args) &rest body) p
        `(,name (,@args ,input) ,(new-compile-and body input names state)))))
  
  (defun compile-form (form input names state)
    "Compile a single parser form as it would appear in an AND or OR."
    (labels ((self (x) (compile-form x input names state)))
      (cond
        ((form-p 'and form)          (new-compile-and (rest form) input names state))
        ((form-p 'or form)           (new-compile-or (rest form) input names state))
        ((form-p 'if form)           (compile-if (cdr form) #'self))
        ((form-p 'match form)        (compile-match (cadr form) input))
        ((form-p 'trace form)        (compile-trace form #'self))
        ((parser-call-p form names)  (compile-parser-call (mklist form) input names state))
        ((stringp form)              (compile-string form input))
        ((characterp form)           (compile-character form input))
        (t                           `(values t ,form ,input)))))
  
  (defun new-compile-form (form input names state)
    "Compile a single parser form as it would appear in an AND or OR."
    (let ((state-bindings (save-state-bindings state)))
      (flet ((self (x) (new-compile-form x input names state)))
        (with-gensyms (ok result next-input)
          `(let (,@state-bindings)
             (multiple-value-bind (,ok ,result ,next-input)
                 ,(cond
                    ((form-p 'and form)          (new-compile-and (rest form) input names state))
                    ((form-p 'or form)           (new-compile-or (rest form) input names state))
                    ((form-p 'if form)           (compile-if (cdr form) #'self))
                    ((form-p 'match form)        (compile-match (cadr form) input))
                    ((form-p 'trace form)        (compile-trace form #'self))
  
negative.code:         (values (if result `(,@new-body ,result) body) variables)))))
  
  (defun compile-or (body input names state)
    (with-gensyms (ok result next-input)
      (if body
          `(multiple-value-bind (,ok ,result ,next-input)
               ,(compile-form (car body) input names state)
             (if ,ok
                 (values ,ok ,result ,next-input)
                 ,(compile-or (rest body) input names state)))
          nil)))
  
  (defun compile-if (body comp)
    (destructuring-bind (test then else) body
  