             [clojure.set :as set])
   )
 
-(defn comp-paths [& paths]
-  (i/comp-paths* (vec paths)))
+(defn comp-paths
+  "Returns a compiled version of the given path for use with
+   compiled-{select/transform/setval/etc.} functions. This can compile navigators
+   (defined with `defnav`) without their parameters, and the resulting compiled
+   path will require parameters for all such navigators in the order in which
+   they were declared."
+  [& apath]
+  (i/comp-paths* (vec apath)))
 
 (def ^{:doc "Mandate that operations that do inline path factoring and compilation
              (select/transform/setval/replace-in/path/etc.) must succeed in 

  (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]
  (pathed-collector [late path]
    (collect-val [this structure]
      (compiled-select late structure)
      )))

(defpathedfn collect-one [& path]
  (pathed-collector [late path]
    (collect-val [this structure]
      (compiled-select-one late structure)

  (transform* [this structure next-fn]
    (next-fn structure)))

(def
  ^{:doc "Navigate to every element of the collection. For maps navigates to
          a vector of `[key value]`."}
  ALL
  (comp-paths (i/->AllNavigator)))

(def VAL (i/->ValCollect))

(def
  ^{:doc "Navigate to the last element of the collection. If the collection is
          empty navigation is stopped at this point."}
  LAST
  (comp-paths (i/->PosNavigator i/get-last i/update-last)))

(def
  ^{:doc "Navigate to the first element of the collection. If the collection is
          empty navigation is stopped at this point."}
  FIRST
  (comp-paths (i/->PosNavigator i/get-first i/update-first)))

(defnav
  ^{:doc "Uses start-fn and end-fn to determine the bounds of the subsequence
