                          (and (> idx -1) (= (aget arr (inc i)) (aget other-arr (inc idx))))))
                 eq))))))))
 
+(defn- persistent-map-hash [m]
+  (mix-collection-hash (if (zero? (.-cnt m)) 0 (.hash-node (.-root m) 0)) (.-cnt m)))
+
 (deftype PersistentHashMap [meta cnt root ^:mutable __hash]
   Object
   (toString [coll]

        :else
        inode)))

  IEquiv
  (-equiv [inode other]
    (if (identical? inode other)

  (single-kv? [_]
    false)

  (hash-node [_ hash-code]
    (let [len (alength arr)]
      (loop [n 0 hash-code hash-code]
        (if (< n len)
          (recur (+ n 2) (bit-or (+ hash-code (hash [(aget arr n) (aget arr (inc n))])) 0))
          hash-code))))

  IEquiv
  (-equiv [inode other]
    (if (identical? inode other)
