   "Returns a lazy sequence of all but the first n items in coll.
   Returns a stateful transducer when no collection is provided."
   ([n]
-     (fn [f1]
+     (fn [rf]
        (let [na (atom n)]
          (fn
-           ([] (f1))
-           ([result] (f1 result))
+           ([] (rf))
+           ([result] (rf result))
            ([result input]
               (let [n @na]
                 (swap! na dec)
                 (if (pos? n)
                   result
-                  (f1 result input))))))))
+                  (rf result input))))))))
   ([n coll]
      (let [step (fn [n coll]
                   (let [s (seq coll)]

   (-pr-writer [coll writer opts]
     (pr-sequential-writer writer pr-writer "(" " " ")" opts coll)))

(defn iteration
  "Returns an iterable/seqable/reducible sequence of applications of
  the transducer to the items in coll. Note that these applications
  will be performed every time iterator/seq/reduce is called."
  [xform coll]
  (Iteration. xform coll))

(defn run!
  "Runs the supplied procedure (via reduce), for purposes of side

  "Returns a lazy seq of every nth item in coll.  Returns a stateful
  transducer when no collection is provided."
  ([n]
     (fn [rf]
       (let [ia (atom -1)]
         (fn
           ([] (rf))
           ([result] (rf result))
           ([result input]
              (let [i (swap! ia inc)]
                (if (zero? (rem i n))
                  (rf result input)
                  result)))))))
  ([n coll]
     (lazy-seq
