   "Do not call this directly, use 'and'"
   [forms preds gfn]
      (reify
-      clojure.lang.IFn
-      (invoke [this x] (valid? this x))
       Spec
       (conform* [_ x] (and-preds x preds forms))
       (unform* [_ x] (reduce #(unform %2 %1) x (reverse preds)))

                          (tagged-ret (keys i) ret))))
                    ::invalid)))]
    (reify
     clojure.lang.IFn
     (invoke [this x] (valid? this x))
     Spec
     (conform* [_ x] (cform x))
     (unform* [_ [k x]] (unform (kps k) x))

      (named? pred) (cond-> (the-spec pred) gfn (with-gen gfn))
      :else
      (reify
       Spec
       (conform* [_ x] (dt pred x form cpred?))
       (unform* [_ x] (if cpred?
