     ))
 
 (extend-protocol GetExtremes
-  #+clj clojure.lang.PersistentVector #+cljs cljs.core/PersistentVector
+  #+clj clojure.lang.IPersistentVector #+cljs cljs.core/PersistentVector
   (get-first [v]
     (get v 0))
   (get-last [v]

  (append (butlast l) (afn (last l))))

#+clj
(defn vec-count [^clojure.lang.PersistentVector v]
  (.count v))

#+cljs
(defn vec-count [v]
  (count v))

(extend-protocol UpdateExtremes
  #+clj clojure.lang.PersistentVector #+cljs cljs.core/PersistentVector
  (update-first [v afn]
    (let [val (get v 0)]
      (assoc v 0 (afn val))



(extend-protocol FastEmpty
  #+clj clojure.lang.IPersistentVector #+cljs cljs.core/PersistentVector
  (fast-empty? [v]
    (= 0 (vec-count v)))
  #+clj Object #+cljs default
