Hi Leon,

thanks a lot for your explanation that a "regex-op outside of a regex-op 
always specs a collection". Then the behaviour is indeed clear

Best regards

Marc

Am Sonntag, 29. Januar 2017 00:32:14 UTC+1 schrieb Leon Grapenthin:
>
> Hi Marc, 
>
>  note that the return of gen/sample is 10 examples. Each one is a 
> collection.
>
> So the collection [] matches your spec, as does [:c]. And so on.
>
> A regex-op outside of a regex-op always specs a collection. If used within 
> another regex-op, it just specs an element.
>
> To illustrate:
> (gen/sample (s/gen (s/cat :kw (s/? #{:a :b :c :d})) :num number?))
>
> ((-2.0) (:a -3.0) (0) (1) (-2.625) (:a -1) (:d -1.5625) (0.75) (:a -24) 
> (:d -22))
>
>
> Kind regards,
>  Leon.
> On Saturday, January 28, 2017 at 6:29:39 PM UTC+1, Marc Wilhelm Küster 
> wrote:
>>
>> Good afternoon,
>>
>> like obviously quite a few others on this list I am looking into the 
>> upcoming (and IMHO absolutely great) clojure.spec 
>> During this I noted that the  ? macro seems to behave differently from 
>> what I would have naively expected from its documentation (cf. 
>> https://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/?
>> ):
>>
>> ? macro
>>
>> Usage: (? pred-form)
>>
>> Returns a regex op that matches zero or one value matching
>> pred. Produces a single value (not a collection) if matched.
>>
>>
>> In contract, with the namespaces set to 
>> [clojure.spec :as s]
>> [clojure.spec.gen :as gen]
>>
>> the following snippet
>>
>> (s/def ::abcd #{:a :b :c :d})
>> (gen/sample (s/gen (s/? ::abcd)))
>>
>> returns a collection of collections:
>> ([] [:c] [:d] [:b] [:b] [] [:a] [] [:d] [])
>>
>> I would have expected to find either the value itself or nothing, a 
>> behaviour that would seem to me also more practical when composing larger 
>> records with optional elements. However, I might be misreading the 
>> documentation and would be grateful for any clarification
>>
>> Best regards,
>>
>> Marc
>>
>>

-- 
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.

Reply via email to