   no collection is provided."
   ([n]
      (fn [rf]
-       (let [na (atom n)]
+       (let [na (volatile! n)]
          (fn
            ([] (rf))
            ([result] (rf result))
            ([result input]
               (let [n @na
-                    nn (swap! na dec)
+                    nn (vswap! na dec)
                     result (if (pos? n)
                              (rf result input)
                              result)]

  Returns a stateful transducer when no collection is provided."
  ([n]
     (fn [rf]
       (let [na (atom n)]
         (fn
           ([] (rf))
           ([result] (rf result))
           ([result input]
              (let [n @na]
                (swap! na dec)
                (if (pos? n)
                  result
                  (rf result input))))))))

           ([result input]
              (let [pval @pa
                    val (f input)]
                (vreset! pa val)
                (if (or (keyword-identical? pval ::none)
                        (= val pval))
                  (do
