       (with-gen* [_ gfn] (tuple-impl forms preds gfn))
       (describe* [_] `(tuple ~@forms)))))
 
+(defn- tagged-ret [tag ret]
+  (clojure.lang.MapEntry. tag ret))
 
 (defn ^:skip-wiki or-spec-impl
   "Do not call this directly, use 'or'"

                      (let [ret (dt pred x (nth forms i))]
                        (if (= ::invalid ret)
                          (recur (inc i))
                          [(keys i) ret])))
                    ::invalid)))]
    (reify
     clojure.lang.IFn

          ::pcat (add-ret p0 ret k)
          ::alt (let [[[p0] [k0]] (filter-alt ps ks forms accept-nil?)
                      r (if (nil? p0) ::nil (preturn p0))]
                  (if k0 (tagged-ret k0 r) r)))))

(defn- op-unform [p x]
  ;;(prn {:p p :x x})
