     (aset narr l k)
     (aset narr (inc l) v)
     narr))
+
+(declare TransientArrayMap)
 
 (deftype PersistentArrayMap [meta cnt arr ^:mutable __hash]
   Object

        ^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]


;;; PersistentArrayMap

(defn- equiv-nil [k k']
  (nil? k'))

(defn- equiv-pred [x]
  (cond
    ^boolean (goog/isString x) identical?
    (nil? x) equiv-nil
    (number? x) identical?
    :else =))

(defn- array-map-index-of [m k]
  (let [arr  (.-arr m)
