   ([k strobj]
      (obj-map-contains-key? k strobj true false))
   ([k strobj true-val false-val]
-     (if (and (goog/isString k) (.hasOwnProperty strobj k))
+     (if (and ^boolean (goog/isString k) ^boolean (.hasOwnProperty strobj k))
        true-val
        false-val)))
 

  (if x true false))

(defn ^boolean string? [x]
  (and (goog/isString x)
       (not (or (identical? (.charAt x 0) \uFDD0)
                (identical? (.charAt x 0) \uFDD1)))))

(defn ^boolean keyword? [x]
  (and (goog/isString x)
       (identical? (.charAt x 0) \uFDD0)))

(defn ^boolean symbol? [x]
  (and (goog/isString x)
       (identical? (.charAt x 0) \uFDD1)))

(defn ^boolean number? [n]


  IMap
  (-dissoc [coll k]
    (if (and ^boolean (goog/isString k) ^boolean (.hasOwnProperty strobj k))
      (let [new-keys (aclone keys)
            new-strobj (goog.object/clone strobj)]
        (.splice new-keys (scan-array 1 k new-keys) 1)
