 
   IMap
   (-dissoc [coll k]
-    (if (and (goog/isString k) (.hasOwnProperty strobj 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)

  (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]

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

