   IReduce
   (-reduce
     ([string f]
-       (ci-reduce string f (-nth string 0) 1))
+       (ci-reduce string f))
     ([string f start]
-       (ci-reduce string f start 0))))
+       (ci-reduce string f start))))
 
 ; could use reify
 ;;; LazySeq ;;;


  ISequential
  IEquiv
  (-equiv [coll other] (equiv-sequential coll other)))

(defn prim-seq [prim i]
  (when-not (= 0 (-count prim))


(defn- lt- [x y]
  (js* "(~{x} < ~{y})"))

(defn- ci-reduce
  "Accepts any collection which satisfies the ICount and IIndexed protocols and
reduces them without incurring seq initialization"
  ([cicoll f]
     (if (= 0 (-count cicoll))
       (f)
       (loop [val (-nth cicoll 0), n 1]
         (if (lt- n (-count cicoll))
           (recur (f val (-nth cicoll n)) (inc n))
           val))))
  ([cicoll f val]
     (loop [val val, n 0]
         (if (lt- n (-count cicoll))
           (recur (f val (-nth cicoll n)) (inc n))
           val)))
  ([cicoll f val idx]
     (loop [val val, n idx]
         (if (lt- n (-count cicoll))
           (recur (f val (-nth cicoll n)) (inc n))
           val))))

(deftype IndexedSeq [a i]
  ISeqable
