                            (let [v (vec (.toArray a))]
                              ;;clear first!
                              (.clear a)
-                             (rf result v)))]
+                             (unreduced (rf result v))))]
               (rf result)))
          ([result input]
             (.add a input)

                             (let [v (vec (.toArray a))]
                               ;;clear first!
                               (.clear a)
                               (rf result v)))]
                (rf result)))
           ([result input]
              (let [pval @pa

                             (rf result input)
                             result)]
                (if (not (pos? nn))
                  (ensure-reduced result)
                  result)))))))
  ([n coll]
     (lazy-seq
