anchor.diff:                 (string= prefix string :start2 start :end2 stop))
         (values stop prefix))))
   
  -(defmethod cpf ((form string) context env)
  +(defmethod cpf ((form string) (context string-context) env)
     (declare (ignore env))
     (values
  -   (typecase context
  -     (string-context
  -      (with-slots (string start end) context
  -        `(starts-with ,string ,start ,end ,form)))
  -     (array-context
  -      (with-slots (array start) context
  -        `(when (string= (aref ,array ,start) ,form)
  -           (values ,form (`+ ,start))))))
  +   (with-slots (string start end) context
  +     `(starts-with ,string ,start ,end ,form))
      t))
   
  -(defmethod cpf ((form character) context env)
  +(defmethod cpf ((form string) (context array-context) env)
  +  (declare (ignore env))
  +  (values
  +   (with-slots (array start) context
  +     `(when (string= (aref ,array ,start) ,form)
  +        (values ,form (`+ ,start))))
  +   t))
  +
  +(defmethod cpf ((form character) (context string-context) env)
     (declare (ignore env))
     (values
      (with-slots (string start end) context
  
positive.code:             ;; what to do here should depend on the context...
              (if (eql form t)
                  ;; special-case: t always matches without consuming input
                  (with-slots (string start end) context
                    `(values end nil))
                  (error "do not know how to expand symbol ~A" form)))))))
  
  (defmethod cpf ((form null) context env)
  
negative.code:   (assert (= (length form) 3))
    (with-slots (string start end) context
      (destructuring-bind (pass fail) (cdr form)
        (let* ((retlist (make-return-list context :gensym t)))
          `(multiple-value-bind ,retlist ,(cpf pass context env)
             (when ,(car retlist)
               (unless ,(cpf fail context env)
                 (values ,@retlist))))))))
  
  (defmethod cpf-list ((car (eql 'assert)) form context env)
    "(assert A) -> A or an exception if no match"
  