   and v is the new value and returns a new nested structure. The associative structure
   can have transients in it, but if any levels do not exist, non-transient hash-maps will
   be created."
-  [m [k & ks :as keys] v]
+  [m [k & ks] v]
   (let [assoc (if (instance? clojure.lang.ITransientCollection m) assoc! assoc)]
     (if ks
       (assoc m k (assoc-in! (get m k) ks v))

  "Returns a lazy sequence of vectors of corresponding items from each collection.
   Stops when the shortest collection runs out."
  [& colls]
  (partition
   (count colls)
   (apply interleave colls)))

(defn find-with
  "Returns the val corresponding to the first key where (pred key) returns true."

  (last (first (filter (comp pred first) (zip keys vals)))))

(defn filter-keys-by-val
  "Returns all keys in map for which (pred value) returns true."
  [pred map]
  (when map
    (for [[key val] map :when (pred val)] key)))

(defn remove-keys-by-val
