 
 (deftype LazySeq [meta realized x]
   IWithMeta
-  (iwith-meta [coll meta] (new LazySeq meta realized x))
+  (-with-meta [coll meta] (new LazySeq meta realized x))
 
   IMeta
-  (imeta [coll] meta)
+  (-meta [coll] meta)
 
   ISeq
-  (ifirst [coll] (first (lazy-seq-value coll)))
-  (irest [coll] (rest (lazy-seq-value coll)))
+  (-first [coll] (first (lazy-seq-value coll)))
+  (-rest [coll] (rest (lazy-seq-value coll)))
 
   ICollection
-  (iconj [coll o] (cons o coll))
+  (-conj [coll o] (cons o coll))
 
 ; IEmptyableCollection
 ; (iempty [coll] coll)
 
   ISeqable
-  (iseq [coll] (seq (lazy-seq-value coll))))
+  (-seq [coll] (seq (lazy-seq-value coll))))
 
 (defn array-seq [array i]
   (lazy-seq

  'added'. (conj nil item) returns (item).  The 'addition' may
  happen at different 'places' depending on the concrete type."
  ([coll x]
     (if coll (iconj coll x) (cons x nil)))
  ([coll x & xs]
     (if xs
       (recur (iconj coll x) (first xs) (next xs))
       (iconj coll x))))

;;; Math - variadic forms will not work until the following implemented:
;;; first, next, reduce

      #_(throw "Can't pop empty vector")))

  ICollection
  (-conj [coll o]
    (let [new-array (array-clone array)]
      (.push new-array o)
      (Vector. meta new-array)))
