anchor.diff:  ;; (next-upto-n (pwxrand '(1 2 3) '(7 5 3) 10))
   ;; ;=> (1 2 1 2 1 3 1 2 1 2)
   
  -See also: `prand', `pxrand', `pwrand'"
  -  ;; FIX: maybe also take the weights into account to see that it doesn't get stuck?
  -  :defun (assert (or (not (listp list))
  -                     (position-if-not (lambda (i) (eql i (car list))) list))
  -                 (list)
  -                 "~s's input list must have at least two non-eql elements" 'pwxrand))
  +See also: `prand', `pxrand', `pwrand'")
  +
  +(defmethod initialize-instance :after ((pwxrand pwxrand) &key)
  +  (with-slots (list weights) pwxrand
  +    (assert (or (not (listp list))
  +                (and (position-if-not (fn (eql _ (car list))) list)
  +                     (or (not (listp weights))
  +                         (find-if-not 'numberp weights)
  +                         (let ((effective-list (loop :for index :from 0
  +                                                     :for elem :in list
  +                                                     :for weight := (elt-wrap weights index)
  +                                                     :if (plusp weight)
  +                                                       :collect elem)))
  +                           (position-if-not (fn (eql _ (car effective-list))) effective-list)))))
  +            (list)
  +            "~S's input list must have at least two non-eql accessible elements." 'pwxrand)))
   
   (defmethod next ((pwxrand pwxrand-pstream))
     (with-slots (list weights last-result) pwxrand
  
positive.code:       (return-from next eop))
      (decf-remaining pwxrand)
      (let* ((clist (next list))
             (cweights (cumulative-list (if (eql weights :equal)
                                            (let ((len (length clist)))
                                              (make-list len :initial-element (/ 1 len)))
                                            (normalized-sum (mapcar #'next (next weights)))))))
        (setf last-result (loop :for res := (nth (index-of-greater-than (random 1.0) cweights) clist)
                                :if (or (not (slot-boundp pwxrand 'last-result))
                                        (not (eql res last-result)))
                                  :return res)))))
  
negative.code: ;; ;=> ((EVENT :FOO 0 :BAR :LESSER) (EVENT :FOO 6 :BAR :GREATER)
  ;;      (EVENT :FOO 7 :BAR :GREATER) (EVENT :FOO 8 :BAR :GREATER))
  
  See also: `pf', `pnary', `plazy', `pif'")
  
  (defmethod initialize-instance :after ((pfunc pfunc) &key)
    (check-type (slot-value pfunc 'func) function-designator))
  
  (defmethod as-pstream ((pfunc pfunc))
    (with-slots (func length) pfunc
  