   (-reduce [v f]
 	   (ci-reduce array f))
   (-reduce [v f start]
-	   (ci-reduce array f start)))
+	   (ci-reduce array f start))
+
+  IFn
+  (-invoke [coll k]
+    (-lookup coll k))
+  (-invoke [coll k not-found]
+    (-lookup coll k not-found)))
 
 (set! cljs.core.Vector/EMPTY (Vector. nil (array)))
 
 (set! cljs.core.Vector/fromArray (fn [xs] (Vector. nil xs)))
-
-(extend-type cljs.core.Vector
-  IFn
-  (-invoke
-    ([_ k] (-lookup (js* "this") k))
-    ([_ k not-found] (-lookup (js* "this") k not-found))))
 
 (defn vec [coll]
   (reduce conj cljs.core.Vector/EMPTY coll)) ; using [] here causes infinite recursion

      (if (< i len)
        (recur (inc i) (assoc out (aget ks i) (aget vs i)))
        out)))))

(extend-type cljs.core.HashMap
  IFn
  (-invoke
    ([_ k] (-lookup (js* "this") k))
    ([_ k not-found] (-lookup (js* "this") k not-found))))

(defn hash-map
  "keyval => key val

     (subvec v start (count v)))
  ([v start end]
     (Subvec. nil v start end)))

;;; PersistentQueue ;;;

