                    (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)
 


(defn ^boolean list? [x]
  (satisfies? IList x))

(extend-type string
  IHash
  (-hash [o] (goog.string/hashCode o)))

(deftype Keyword [ns name fqn ^:mutable _hash]
  Object


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

(declare with-meta)

