   (-get-method [mf dispatch-val])
   (-methods [mf])
   (-prefers [mf])
-  (-invoke [mf args]))
-
-(defn- do-invoke
+  (-dispatch [mf args]))
+
+(defn- do-dispatch
   [mf dispatch-fn args]
   (let [dispatch-val (apply dispatch-fn args)
         target-fn (-get-method mf dispatch-val)]

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

(set! cljs.core.Subvec.prototype.call
      (fn
        ([_ k] (-lookup (js* "this") k))
        ([_ k not-found] (-lookup (js* "this") k not-found))))

;;; PersistentQueue ;;;



(set! cljs.core.Set/EMPTY (Set. nil (hash-map)))

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

(defn set
  "Returns a set of the distinct elements of coll."
