   (-rest [coll] (if (nil? rest) () rest))
 
   ICollection
-  (-conj [coll o] (new Cons nil o coll))
+  (-conj [coll o] (Cons. nil o coll))
 
 ; IEmptyableCollection
 ; (iempty [coll] List.EMPTY)


(deftype EmptyList [meta]
  IWithMeta
  (-with-meta [coll meta] (new EmptyList meta))

  IMeta
  (-meta [coll] meta)


(deftype List [meta first rest count]
  IWithMeta
  (-with-meta [coll meta] (List. meta first rest count))

  IMeta
  (-meta [coll] meta)

  ISeq
  (-first [coll] first)
  (-rest [coll] (if (nil? rest) (EmptyList. meta) rest))

  IStack
  (-peek [coll] first)
  (-pop [coll] (irest coll))

  ICollection
  (-conj [coll o] (List. meta o coll (inc count)))

; IEmptyableCollection
; (iempty [coll] coll)
