anchor.diff:              (when ok2
                 (good (cons r r2) pos2)))))))
   
  -
   (defparserfun text (p text position)
     "Capture the text matched by P."
     (multiple-value-bind (ok r pos) (funcall p text position)
       (declare (ignore r))
  -    (when ok (good (subseq text position pos) pos))))
  +    (when ok
  +      (good (subseq text position pos) pos))))
   
   
   ;;;; Tracing helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
positive.code: 
  (defparserfun look-ahead (p text position)
    "Succeed if P matches. Does not consume any input in either case."
    (when (funcall p text position) (good nil position)))
  
  (defparserfun ! (p text position)
    "Succeed only if P does not match. Does not consume any input in either case."
    (values (not (funcall p text position)) nil position))
  
  (defparserfun ? (p predicate text position)
    "Succeed if P succeeds and the result satisifes the given predicate."
    (multiple-value-bind (ok r pos) (funcall p text position)
      (when (and ok (funcall predicate r)) (good r pos))))
  
  
  (defparserfun counted (n p text position)
    "Match P N times. Return a list of values matched by P."
  
negative.code:   (values t result position))
  
  (defun matching-string (s len text position)
    (let ((end (+ position len)))
      (when (and (<= end (length text))
                 (string= s text :start2 position :end2 end))
        (good s end))))
  
  (defun matching-char (c text position)
    (when (and (< position (length text)) (char= c (char text position)))
      (good c (1+ position))))
  
  
  ;;; Parser primitives ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  