(defn
drop
"Returns a lazy sequence of all but the first n items in coll.\n Returns a stateful transducer when no collection is provided."
([n]
{:pre [(number? n)]}
(fn
[rf]
(let
[na (volatile! n)]
(fn
([] (rf))
([result] (rf result))
([result input]
(let
[n @na]
(vswap! na dec)
(if (pos? n) result (rf result input))))))))
([n coll]
{:pre [(number? n)]}
(let
[step
(fn
[n coll]
(let
[s (seq coll)]
(if (and (pos? n) s) (recur (dec n) (rest s)) s)))]
(lazy-seq (step n coll)))))