alt

added

ns
clojure.spec

type
macro

(alt & key-pred-forms)

Takes key+pred pairs, e.g.

(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

                ;; unlike `or`, `alt` works on sequence elements, not on values themselves!

user=> (s/conform (s/alt :num number? :key keyword?) 3)
:clojure.spec.alpha/invalid

user=> (s/conform (s/alt :num number? :key keyword?) [3])
[:num 3]

;; compare this to `or`:
user=> (s/conform (s/or :num number? :key keyword?) 3)
[:num 3]

user=> (s/conform (s/or :num number? :key keyword?) [3])
:clojure.spec.alpha/invalid