 
 ;;; PersistentArrayMap
 
-(defn equiv-nil [k k']
+(defn- equiv-nil [k k']
   (nil? k'))
 
-(defn equiv-identical [k k']
-  (identical? k k'))
-
-(defn equiv-default [k k']
-  (= k k'))
-
-(defn equiv-pred [x]
+(defn- equiv-pred [x]
   (cond
-    ^boolean (goog/isString x) equiv-identical
+    ^boolean (goog/isString x) identical?
     (nil? x) equiv-nil
-    (number? x) equiv-identical
-    :else equiv-default))
+    (number? x) identical?
+    :else =))
 
 (defn- array-map-index-of [m k]
   (let [arr  (.-arr m)

        ^boolean (pred k (aget arr i)) i
        :else (recur (+ i 2))))))

(declare TransientArrayMap)

(defn array-extend-kv [arr k v]
  (let [l (alength arr)
        narr (make-array (+ l 2))]
    (loop [i 0]

    (aset narr l k)
    (aset narr (inc l) v)
    narr))

(declare TransientArrayMap)

(deftype PersistentArrayMap [meta cnt arr ^:mutable __hash]
  Object
