diff --git a/scripts/benchmarks.clj b/scripts/benchmarks.clj index c3abf51..9cf16d2 100644 --- a/scripts/benchmarks.clj +++ b/scripts/benchmarks.clj @@ -135,6 +135,13 @@ ret))))) +(let [data '(1 2 3 4 5)] + (run-benchmark "transform values of a list" 500000 + (transform ALL inc data) + (sequence (map inc) data) + (reverse (into '() (map inc) data)) + )) + (let [data {:a 1 :b 2 :c 3 :d 4}] (run-benchmark "transform values of a small map" 500000 (into {} (for [[k v] data] [k (inc v)])) diff --git a/src/clj/com/rpl/specter/navs.cljc b/src/clj/com/rpl/specter/navs.cljc index 8fffc64..30d3837 100644 --- a/src/clj/com/rpl/specter/navs.cljc +++ b/src/clj/com/rpl/specter/navs.cljc @@ -55,12 +55,7 @@ (defn- all-transform-list [structure next-fn] - ;; this is done to maintain order, otherwise lists get reversed - (->> structure - (into '() - (comp (map next-fn) (filter not-NONE?))) - reverse - )) + (sequence (comp (map next-fn) (filter not-NONE?)) structure)) (extend-protocol AllTransformProtocol nil