    Tests the structure if selecting with cond-path returns anything.
    If so, it uses the following selector for this portion of the navigation.
    Otherwise, it tries the next cond-path. If nothing matches, then the structure
-   is not selected."
+   is not selected.
+
+   The input paths may be parameterized, in which case the result of cond-path
+   will be parameterized in the order of which the parameterized selectors
+   were declared."
   [& conds]
   (variable-pathed-path [compiled-paths conds]
     (select* [this structure next-fn]


;; Helpers for defining selectors and collectors with late-bound params

(def bind-params* i/bind-params*)

(defmacro paramspath [params & impls]
  (let [num-params (count params)
        retrieve-params (i/make-param-retrievers params)]
    (i/paramspath* retrieve-params num-params impls)
    ))

(defmacro paramscollector [params impl]
  (let [num-params (count params)
        retrieve-params (i/make-param-retrievers params)]
    (i/paramscollector* retrieve-params num-params impl)

(defn selected?
  "Filters the current value based on whether a selector finds anything.
  e.g. (selected? :vals ALL even?) keeps the current element only if an
  even number exists for the :vals key.

  The input path may be parameterized, in which case the result of selected?
  will be parameterized in the order of which the parameterized selectors
  were declared."
  [& path]
  (fixed-pathed-path [late path]
    (select* [this structure next-fn]
