anchor.diff:  
   (defmethod next-n ((pattern pattern) (n number))
     (next-n (as-pstream pattern) n))
  +
  +(defun next-upto-n (pattern &optional (n *max-pattern-yield-length*))
  +  "Return a list of up to N values of PATTERN. If PATTERN ends after less than N values, then only that many values will be returned."
  +  (let ((pstream (as-pstream pattern))
  +        (results (list))
  +        (number 0))
  +    (block loop
  +      (loop
  +         (let ((val (next pstream)))
  +           (if (or (null val)
  +                   (= number n))
  +               (return-from loop)
  +               (progn
  +                 (setf results (append results (list val)))
  +                 (incf number))))))
  +    results))
   
   ;;; pstream
   
  
positive.code: 
  ;;; pbind
  
  ;; FIX: maybe an empty pbind (i.e. `(pbind)`) shouldn't return just nils? maybe just empty events?
  (defclass pbind (pattern)
    ((pairs :initarg :pairs :accessor :pairs :initform (list)))
    (:documentation "A pbind associates keys with values for a pattern stream that returns events."))
  
negative.code:   ((list :initarg :list :accessor :list))
    "A pseq yields values from its list in the same order they were provided.")
  
  (defun pseq (list &optional (repeats 1))
    "Create an instance of the PSEQ class."
    (make-instance 'pseq
                   :list list
  