   (reduce conj () (reverse items)))
 
 (deftype Cons [meta first rest]
+  Object
+  (toString [this]
+    (pr-str this))
+
   IWithMeta
   (-with-meta [coll meta] (Cons. meta first rest))
 

        (.-x lazy-seq)))))

(deftype LazySeq [meta realized x]
  IWithMeta
  (-with-meta [coll meta] (LazySeq. meta realized x))


(defn vector [& args] (vec args))

(deftype Subvec [meta v start end]
  Object
  (toString [this]
    (pr-str this))

  IWithMeta
  (-with-meta [coll meta] (Subvec. meta v start end))

