      (mapcat #(apply map (partial deepfapply %) m ms) fs))))
 
 (defn- group-keys [ms k]
-  (vals (map #(find % k) ms)))
+  (let [matches (map #(find % k) ms)]
+    (when-not (every? nil? matches)
+        (vals matches))))
 
 (defn- assc-fapply
   ([fs m]

     (coll? m) (coll-pure m value)
     :else
     value)))


(defn deeppure
  "This is a recursive version of pure. It will replace all values in
   the given type with value. All keys on maps will also be preserved."
  ([m]
   (fn [value]
     (pure m value)))
