 
 (defn codewalker [afn] (i/->CodeWalkerStructurePath afn))
 
-(defn filterer [& path]
+(defn filterer
+  "Navigates to a view of the current sequence that only contains elements that
+  match the given selector path. An element matches the selector path if calling select
+  on that element with the selector path yields anything other than an empty sequence.
+
+   The input path may be parameterized, in which case the result of filterer
+   will be parameterized in the order of which the parameterized selectors
+   were declared."
+  [& path]
   (fixed-pathed-path [late path]
     (select* [this structure next-fn]
       (->> structure (filter #(i/selected?* late %)) doall next-fn))


(defn transformed
  "Navigates to a view of the current value by transforming it with the
   specified selector and update-fn."
  [path update-fn]
  (fixed-pathed-path [late path]
    (select* [this structure next-fn]


(def FIRST (i/->PosStructurePath first i/set-first))

(defparamspath
  ^{:doc "Uses start-fn and end-fn to determine the bounds of the subsequence
          to select when navigating. Each function takes in the structure as input."}
  srange-dynamic
  [start-fn end-fn]
  (select* [this structure next-fn]
    (i/srange-select structure (start-fn structure) (end-fn structure) next-fn))
  (transform* [this structure next-fn]
    (i/srange-transform structure (start-fn structure) (end-fn structure) next-fn)
    ))

(defparamspath
  ^{:doc "Navigates to the subsequence bound by the indexes start (inclusive)
          and end (exclusive)"}
  srange
  [start end]
  (select* [this structure next-fn]
    (i/srange-select structure start end next-fn))
  (transform* [this structure next-fn]
