Looking forward to trying this out. I've been implementing another language in Clojure (tho just experimenting for the moment). It's a non-lazy language (Groovy) so I have reduce all over the place, e.g.
(defn multiply [a b]
(cond (and (number? a) (number? b)) (* a b)
(and (vector? a) (integer? b)) (reduce conj  (flatten (repeat b a)))
(and (string? a) (integer? b)) (reduce str (repeat b a))))
(defn findAll [coll clos]
(reduce conj  (filter clos coll)))