   "Returns the number of items in the collection. (count nil) returns
   0.  Also works on strings, arrays, and Maps"
   [coll]
-  (if (not (nil? coll))
-    (if (satisfies? ICounted coll)
-      (-count coll)
-      (loop [s (seq coll) n 0]
-	(if s
-	  (recur (next s) (inc n))
-	  n)))
-    0))
+  (-count coll))
 
 (defn nth
   "Returns the value at the index. get returns nil if index out of

  "Returns a possibly empty seq of the items after the first. Calls seq on its
  argument."
  [coll]
  (when-let [s (seq coll)]
    (-rest s)))

(defn next
  "Returns a seq of the items after the first. Calls seq on its

         (if (< n (-count cicoll))
           (recur (f val (-nth cicoll n)) (inc n))
           val))))

(extend-type nil
  ICounted
  (-count [coll] 0)

  IEmptyableCollection
  (-empty [coll] nil)

  ICollection
  (-conj [coll o] (list o))

  IIndexed
  (-nth
   ([coll n] nil)
   ([coll n not-found] not-found))

  ISeq
  (-first [coll] nil)
  (-rest [coll] (list))

  ILookup
  (-lookup
   ([o k] nil)
   ([o k not-found] not-found))

  IAssociative
  (-assoc [coll k v] (hash-map k v))

  IMap
  (-dissoc [coll k] nil)

  ISet
  (-contains? [coll v] false)
  (-disjoin [coll v] nil)

  IStack
  (-peek [coll] nil)
  (-pop [coll] nil)

  IMeta
  (-meta [o] nil)

  IWithMeta
  (-with-meta [o meta] nil))

(extend-type default
  ICounted
  (-count [coll]
    (loop [s (seq coll) n 0]
      (if s
	(recur (next s) (inc n))
	n))))

(extend-type goog.global.Date
  IEquiv
