         keys->specs #(c/or (k->s %) %)
         id (java.util.UUID/randomUUID)]
     (reify
-     clojure.lang.IFn
-     (invoke [this x] (valid? this x))
      Spec
      (conform* [_ m]
                (if (keys-pred m)

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

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