   (transform* [this structure next-fn]
     (next-fn (if (nil? structure) v structure))))
 
-(def NIL->SET (nil->val #{}))
-(def NIL->LIST (nil->val '()))
-(def NIL->VECTOR (nil->val []))
-
-(defpathedfn collect [& path]
+(def
+  ^{:doc "Navigates to #{} if the value is nil. Otherwise it stays
+          navigated at the current value."}
+  NIL->SET
+  (nil->val #{}))
+
+(def
+  ^{:doc "Navigates to '() if the value is nil. Otherwise it stays
+          navigated at the current value."}
+  NIL->LIST
+  (nil->val '()))
+
+(def
+  ^{:doc "Navigates to [] if the value is nil. Otherwise it stays
+          navigated at the current value."}
+  NIL->VECTOR
+  (nil->val []))
+
+(defpathedfn
+  ^{:doc "Adds the result of running select with the given path on the
+          current value to the collected vals."}
+  collect
+  [& path]
   (pathed-collector [late path]
     (collect-val [this structure]
       (compiled-select late structure)
       )))
 
-(defpathedfn collect-one [& path]
+(defpathedfn
+  ^{:doc "Adds the result of running select-one with the given path on the
+          current value to the collected vals."}
+  collect-one
+  [& path]
   (pathed-collector [late path]
     (collect-val [this structure]
       (compiled-select-one late structure)

    (i/walk-until afn next-fn structure)))

(defnav
  codewalker
  [afn]
  (select* [this structure next-fn]

             newmap))))

(defnav
  ^{:doc "Using clojure.walk, navigate the data structure until reaching
          a value for which `afn` returns truthy."}
  walker
  [afn]
  (select* [this structure next-fn]
