 
 (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)
+        (satisfies? p/Collector this) (coerce-collector this)
+        (satisfies? p/StructureValsPath this) (coerce-structure-vals-path this)
         (instance? TransformFunctions this) (coerce-structure-vals this)
         :else (throw-illegal (no-prot-error-str this))
   ))

      (coerce-path (vec this)))
    ])
  
  #?(:clj Object :cljs object)
  (coerce-path [this]
    (cond (structure-path? this) (coerce-structure-path this)
          (obj-extends? `p/Collector this) (coerce-collector this)
          (obj-extends? `p/StructureValsPath this) (coerce-structure-vals-path this)
          :else (throw-illegal (no-prot-error-str this))
      )))


    )))

(defn structure-path? [obj]
  (or (fn? obj) (satisfies? p/StructurePath obj)))

(extend-protocol CoerceTransformFunctions
  nil ; needs its own path because it doesn't count as an Object
