(deftype SeqFly [s] clojure.lang.ISeq (first [this] (first (some-seq s))) (next [this] (SeqFly. (last (some-seq s)))) (more [this] (next this)) Object (toString [this] (str s)))