anchor.diff:  ;; (author this-code) => (:name "Dylan Ball" :email "Arathnim@gmail.com")
   
   (declaim (optimize (speed 3) (safety 0) (debug 3) (space 0)))
  -;; (declaim #+sbcl(sb-ext:muffle-conditions style-warning))
  +
   (ql:quickload '(alexandria iterate anaphora) :silent t)
  -(defpackage wernicke (:use cl alexandria iterate anaphora))
  +
  +(defpackage wernicke 
  +	(:use cl alexandria iterate anaphora)
  +	(:export "DEFPARSER" "PARSE" "CHR" "STR" "ONE-OF" "NONE-OF" 
  +		"ANY" "MANY" "SEQ" "CHOICE" "RANGE" "TRY" "OPTIONAL" "TIMES"
  +		"*RUN-HOOKS*"))
  +
   (in-package wernicke)
   
   ;; data
  
positive.code: 
  (define-parser try (p)
     (let* ((*index* *index*))
        (funcall p)))
  
  (define-parser any (p)
     (iter (for r = (funcall p))
           (until (error? r))
           (collect r into result)
           (finally (return result))))
  
  (define-parser many (p)
     (iter (for r = (funcall p))
           (until (error? r))
           (collect r into result)
           (finally (return (or result (fail 'many))))))
  
  (define-parser choice (&rest parsers)
     (iter (for parser in parsers)
           (for parser-result = (funcall parser))
           (on-success parser-result (leave parser-result))
           (finally (return (fail 'choice)))))
  
  (define-parser seq (&rest parsers)
     (iter (for parser in parsers)
           (for parser-result = (funcall parser))
           (on-failure parser-result (leave parser-result))
  			(collect parser-result)))
  
  (define-parser times (n parser)
     (iter (repeat n)
           (for parse-result = (funcall parser))
           (on-failure parse-result (leave parse-result))
           (collect parse-result into list)
           (finally (return list))))
  
  (define-parser optional (parser)
     (if (error? (funcall (try parser)))
         nil
         (funcall parser)))
  
  (define-parser range (a b)
  	(if (test-remaining 1)
  
negative.code: 
  (define-parser str (string)
     (iter (for char in-string string)
           (for parse-result = (run-parser (chr char)))
           (on-failure parse-result (leave parse-result))
           (finally (return string))))
  
  