    (if ks
      (assoc m k (apply update-in (get m k) ks f args))
      (assoc m k (apply f (get m k) args)))))
-
-
-;;; Transients
-
-(defn transient [coll]
-  (-as-transient coll))
-
-(defn persistent! [tcoll]
-  (-persistent! tcoll))
-
-(defn conj! [tcoll val]
-  (-conj! tcoll val))
-
-(defn assoc! [tcoll key val]
-  (-assoc! tcoll key val))
-
-(defn dissoc! [tcoll key]
-  (-dissoc! tcoll key))
-
-(defn pop! [tcoll]
-  (-pop! tcoll))
-
-(defn disj! [tcoll val]
-  (-disjoin! tcoll val))
 
 
 ;;; Vector

  ([a b c args] (cons a (cons b (cons c args))))
  ([a b c d & more]
     (cons a (cons b (cons c (cons d (spread more)))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; apply ;;;;;;;;;;;;;;;;


  "Returns a new coll consisting of to-coll with all of the items of
  from-coll conjoined."
  [to from]
  (if (satisfies? IEditableCollection to)
    (persistent! (reduce -conj! (transient to) from))
    (reduce -conj to from)))

(defn partition
  "Returns a lazy sequence of lists of n items each, at offsets step
