 (defn map-vals-non-transient-transform [structure empty-map next-fn]
   (reduce-kv
     (fn [m k v]
-      (assoc m k (next-fn v)))
+      (let [newv (next-fn v)]
+        (if (identical? newv i/NONE)
+          m
+          (assoc m k newv))))
     empty-map
     structure))
 

       (let [k-it (.keyIterator structure)
             v-it (.valIterator structure)
             array (i/fast-object-array (* 2 (.count structure)))]
         (loop [i 0]
           (if (.hasNext k-it)
             (let [k (.next k-it)

    (walk/walk (partial walk-until pred on-match-fn) identity structure)))


(defn- do-keypath-transform [vals structure key next-fn]
  ;;TODO: not right, this doesn't handle sequences
  (let [newv (next-fn vals (get structure key))]
    (if (identical? newv i/NONE)
      (dissoc structure key)
      (assoc structure key newv))))

(defrichnav
  ^{:doc "Navigates to the specified key, navigating to nil if it does not exist."}
  keypath*
