I just translated the Haskell example into Clojure:
user> (def alternates
(letfn [(x [] (lazy-seq (cons 0 (y))))
(y [] (lazy-seq (cons 1 (x))))]
(x)))
user> (take 7 alternates)
(0 1 0 1 0 1 0)
, . cycle letfn:
user> (take 7 (cycle [0 1]))
(0 1 0 1 0 1 0)