    ;; same thing here but we'll mutually walk ms
    (let [mcoll (cons m ms)]
      (cond
-       (list? m) (u/save-metas (map (partial flst f) mcoll) mcoll)
-       (vector? m) (u/save-metas (map (partial fvec f) mcoll) mcoll)
-       (seq? m) (u/save-metas (map (partial fseq f) mcoll) mcoll)
-       (set? m) (u/save-metas (map (partial fset f) mcoll) mcoll)
-       (associative? m) (u/save-metas (fassc f m ms) mcoll)
+       (list? m) (u/save-metas (map (partial fmap-lst f) mcoll) mcoll)
+       (vector? m) (u/save-metas (map (partial fmap-vec f) mcoll) mcoll)
+       (seq? m) (u/save-metas (map (partial fmap-seq f) mcoll) mcoll)
+       (set? m) (u/save-metas (map (partial fmap-set f) mcoll) mcoll)
+       (associative? m) (u/save-metas (fmap-map f m ms) mcoll)
        (fn? m) (map #(comp f %) mcoll)
        :else
        (apply f mcoll)))))

         (into {}
           (map (partial filter #(not (contains? fs (key %))))
             args)))]
  (defn- map-zip [fs & args]
    (reduce-kv (fn [acc k v]
                 (if (fn? v)
                   (assoc acc k (apply (partial deepfmap v)

      (mapcat #(apply map (partial deepfapply #?(:clj (eval %)
                                                 :cljs %)) m ms) fs))))

(defn- fapply-seq
  ([fs m]
   (mapcat #(map (partial deepfapply %) m) fs))
  ([fs m ms]
   (mapcat #(apply map (partial deepfapply %) m ms) fs)))

(defn- fapply-set
  ([fs m]
   (set
     (mapcat #(map (partial deepfapply %) m) fs)))
