 
 (deftype AllStructurePath [])
 
-(extend-protocol StructurePath
+(extend-protocol p/StructurePath
   AllStructurePath
   (select* [this structure next-fn]
     (into [] (r/mapcat next-fn structure)))

      (reduce (fn [^TransformFunctions curr ^TransformFunctions next]
                (->TransformFunctions
                 exs
                 (combiner (.selector curr) (.selector next))
                 (combiner (.transformer curr) (.transformer next))
                 ))
              all))))

(defn coerce-structure-vals [^TransformFunctions tfns]
  (if (= (extype tfns) :svalspath)
    tfns
    (let [selector (.selector tfns)
          transformer (.transformer tfns)]
      (->TransformFunctions
        StructureValsPathExecutor
        (fn [vals structure next-fn]


(defn coerce-structure-vals-direct [this]
  (cond (structure-path? this) (coerce-structure-path-direct this)
        (obj-extends? `p/Collector this) (coerce-collector this)
        (obj-extends? `p/StructureValsPath this) (coerce-structure-vals-path this)
        (instance? TransformFunctions this) (coerce-structure-vals this)
        :else (throw-illegal (no-prot-error-str this))
  ))
