 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; equality ;;;;;;;;;;;;;;
 
-(extend-protocol IEquiv
-  goog.global.Date ; treat dates as values
-  (-equiv [o other] (identical? (str o) (str other))))
 
 (defn = [x y]
   (if (satisfies? IEquiv x)

           (recur (f val (-nth cicoll n)) (inc n))
           val))))

(extend-protocol IReduce
  string
  (-reduce
    ([string f]
       (ci-reduce string f (-nth string 0) 1))
    ([string f start]
       (ci-reduce string f start 0)))
  array
  (-reduce
    ([array f]
       (ci-reduce array f (-nth array 0) 1))
    ([array f start]
       (ci-reduce array f start 0))))

(defn cons
  "Returns a new seq where x is the first element and seq is the rest."

    (when (< i (-count prim))
      (cons (-nth prim i) (prim-seq prim (inc i))))))

(defn- ci-reduce
  "Accepts any collection which satisfies the ICount and IIndexed protocols and
reduces them without incurring seq initialization"
