   ([forms preds] (tuple-impl forms preds nil))
   ([forms preds gfn]
      (reify
-      clojure.lang.IFn
-      (invoke [this x] (valid? this x))
       Spec
       (conform* [_ x]
                 (if-not (c/and (vector? x)

                          (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))

        keys->specs #(c/or (k->s %) %)
        id (java.util.UUID/randomUUID)]
    (reify
     Spec
     (conform* [_ m]
               (if (keys-pred m)
