Hi Sean, unfortunately the problem is more complex. The "default" predicate i am using is a second case which sometimes overlaps with the first pred.
For Example: (spec/alt :strings (spec/* string?) :length (spec/* #(< 1 (count (str %)))) on input ["string" 1 ] matches only "string" but on ["string" 11] it matches both. Am Donnerstag, 2. August 2018 23:05:49 UTC+2 schrieb Sean Corfield: > > I would assume it’s a “maximal munch” strategy at play here: (spec/* > string?) will only match one string in your input but (spec/* identity) > will match all three elements so it “wins” as the best match. > > > > Perhaps :default (spec/* (complement string?)) will do what you need? > (depending on exactly what you want to happen if you aren’t matching at > least one string?) > > > > Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN > An Architect's View -- http://corfield.org/ > > "If you're not annoying somebody, you're not really alive." > -- Margaret Atwood > > > ------------------------------ > *From:* clo...@googlegroups.com <javascript:> <clo...@googlegroups.com > <javascript:>> on behalf of J <jvid...@gmail.com <javascript:>> > *Sent:* Thursday, August 2, 2018 6:31:15 AM > *To:* Clojure > *Subject:* Order of preds in clojure.spec/alt > > Hi there, > > right now i am using spec to match some input data with something like > this > > (require '[clojure.spec.alpha :as spec]) > > (spec/conform (spec/cat :stuff (spec/alt > :strings (spec/* string?) > ;:default (spec/* identity) > ) > :rest (spec/* identity)) > ["some string" 2 2]) > > > => {:stuff [:strings ["some string"]], :rest [2 2]} > > > > But if i add a "default" to alt it returns something unexpected > > (spec/conform (spec/cat :stuff (spec/alt > :strings (spec/* string?) > :default (spec/* identity)) > :rest (spec/* identity)) > ["some string" 2 2]) > > => {:stuff [:default ["some string" 2 2]]} > > > The docs > https://clojure.github.io/spec.alpha/clojure.spec.alpha-api.html#clojure.spec.alpha/alt > > says: > Returns a regex op that returns a map entry containing the key of the > > first matching pred and the corresponding value. > > > I would expect that (spec/* string?) is the first matching pred and not the > (spec/* identitiy). > > Is this behavior correct? > > > Thanks J > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@googlegroups.com <javascript:> > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+u...@googlegroups.com <javascript:> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+u...@googlegroups.com <javascript:>. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.