        (constructor item))))
 
 (defn mapvals
-  "Return map `m`, with each value transformed by function `f`"
-  [f m]
-  (into {} (concat (for [[k v] m]
-                     [k (f v)]))))
+  "Return map `m`, with each value transformed by function `f`.
+
+  You may also provide an optional list of keys `ks`; if provided, only the
+  specified keys will be modified."
+  ([f m]
+    (mapvals f m (keys m)))
+  ([f m ks]
+    (reduce (fn [m k] (update-in m [k] f)) m ks)))
 
 (defn mapkeys
   "Return map `m`, with each key transformed by function `f`"

  (into {} (concat (for [[k v] m]
                     [(f k) v]))))

(defn array?
  "Returns true if `x` is an array"
  [x]
  (-?> x
       (class)
       (.isArray)))

(defn keyset
  "Retuns the set of keys from the supplied map"

  (set (vals m)))

;; ## Date and Time

(defn timestamp
  "Returns a timestamp string for the given `time`, or the current time if none
