           ::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 [k0 r] r)))))
+                  (if k0 (tagged-ret k0 r) r)))))
 
 (defn- op-unform [p x]
   ;;(prn {:p p :x x})


  (s/or :even even? :small #(< % 42))

  Returns a destructuring spec that
  returns a vector containing the key of the first matching pred and the
  corresponding value."
  [& key-pred-forms]
  (let [pairs (partition 2 key-pred-forms)
        keys (mapv first pairs)


  (s/alt :even even? :small #(< % 42))

  Returns a regex op that returns a map entry containing the key of the
  first matching pred and the corresponding value. Thus the
  'key' and 'val' functions can be used to refer generically to the
  components of the tagged return"
  [& key-pred-forms]
  (let [pairs (partition 2 key-pred-forms)
        keys (mapv first pairs)
