It works
clojure.lang.IReduceInit (reduce [_ rf init] (let [init (rf init a)] (if (reduced? init) @init (reduce rf init (pull f)))))
(defn pull [f] (if (instance? clojure.lang.Fn f) (recur (f)) f))