   "Returns a new seq where x is the first element and seq is the rest."
   [x seq]
   (Cons. nil x seq))
-
-(declare hash-map)
 
 (extend-type string
   IHash

(defn- hash-coll [coll]
  (reduce #(hash-combine %1 (hash %2)) (hash (first coll)) (next coll)))

(defn- extend-object!
  "Takes a JavaScript object and a map of names to functions and
  attaches said functions as methods on the object.  Any references to

     (> a b) 1
     :else 0)))

(deftype ObjMap [meta keys strobj]
  IWithMeta
  (-with-meta [coll meta] (ObjMap. meta keys strobj))
