                    (bit-shift-right seed 2))))
 
 (defn- hash-coll [coll]
-  (reduce #(hash-combine %1 (hash %2 false)) (hash (first coll) false) (next coll)))
+  (if (seq coll)
+    (loop [res (hash (first coll)) s (next coll)]
+      (if (nil? s)
+        res
+        (recur (hash-combine res (hash (first s))) (next s))))
+    0))
 
 (declare key val)
 


(extend-type number
  IEquiv
  (-equiv [x o] (identical? x o))

  IHash
  (-hash [o] (js-mod (.floor js/Math o) 2147483647)))

(extend-type boolean
  IHash
  (-hash [o]
    (if (identical? o true) 1 0)))

(declare with-meta)


      h
      (add-to-string-hash-cache k))))

(defn hash [o]
  (cond
    (satisfies? IHash o false)
    (-hash ^not-native o)

    (number? o)
    (js-mod (.floor js/Math o) 2147483647)

    (true? o) 1

    (false? o) 0

    (string? o)
    (check-string-hash-cache o)
    
    :else
    (-hash o)))

(defn ^boolean empty?
  "Returns true if coll has no items - same as (not (seq coll)).
