               )]
     (->TransformFunctions StructureValsPathExecutor afn afn)))
 
+
+(defn structure-path-impl [this]
+  (if (fn? this) 
+    (-> StructurePath :impls (get clojure.lang.AFn))
+    (find-protocol-impl! StructurePath this)))
+
 (defn coerce-structure-path [this]
-  (let [pimpl (find-protocol-impl! StructurePath this)
+  (let [pimpl (structure-path-impl this)
         selector (:select* pimpl)
         updater (:update* pimpl)]
     (->TransformFunctions

(defn obj-extends? [prot obj]
  (->> obj (find-protocol-impl prot) nil? not))

(extend-protocol CoerceTransformFunctions

  TransformFunctions

        ))))

(defn coerce-structure-vals-direct [this]
  (cond (structure-path? this) (coerce-structure-path-direct this)
        (obj-extends? Collector this) (coerce-collector this)
        (obj-extends? StructureValsPath this) (coerce-structure-vals-path this)
        (instance? TransformFunctions this) this
