The first predicate determines the generator.

> On May 25, 2016, at 8:03 PM, Leon Grapenthin <grapenthinl...@gmail.com> wrote:
> 
> Just had a chance to play around with spec. Looks like this is going to 
> destroy a lot of problem space :) Thanks.
> 
> Probably a bug:
>       (s/exercise
>         (s/and
>          set?
>          (s/coll-of
>           (s/with-gen keyword?
>             #(gen/elements [:s1 :s2 :s3]))
>           #{})))
> ;->
> ([#{} #{}] [#{} #{}] [#{} #{}] [#{:o-85:1ywl} #{:o-85:1ywl}] [#{} #{}] [#{} 
> #{}] [#{} #{}] 
> [#{:_Qi.Qj?dtMZh_s*3.x.sTxm9-E.NHr!?b5f0Ir2.u.+bof*-P.r.m_y**e0ntq.W+*.+?Urxe+Xp+/Q}
>  
> #{:_Qi.Qj?dtMZh_s*3.x.sTxm9-E.NHr!?b5f0Ir2.u.+bof*-P.r.m_y**e0ntq.W+*.+?Urxe+Xp+/Q}]
>  [#{} #{}] [#{} #{}])
> 
> Reverse argument order to s/and and it works.
> 
> On Monday, May 23, 2016 at 4:12:29 PM UTC+2, Rich Hickey wrote:
> Introducing clojure.spec 
> 
> I'm happy to introduce today clojure.spec, a new core library and support for 
> data and function specifications in Clojure. 
> 
> Better communication 
> 
> Clojure is a dynamic language, and thus far we have relied on documentation 
> or external libraries to explain the use and behavior of functions and 
> libraries. But documentation is difficult to produce, is frequently not 
> maintained, cannot be automatically checked and varies greatly in quality. 
> Specs are expressive and precise. Including spec in Clojure creates a lingua 
> franca with which we can state how our programs work and how to use them. 
> 
> More leverage and power 
> 
> A key advantage of specifications over documentation is the leverage they 
> provide. In particular, specs can be utilized by programs in ways that docs 
> cannot. Defining specs takes effort, and spec aims to maximize the return you 
> get from making that effort. spec gives you tools for leveraging specs in 
> documentation, validation, error reporting, destructuring, instrumentation, 
> test-data generation and generative testing. 
> 
> Improved developer experience 
> 
> Error messages from macros are a perennial challenge for new (and 
> experienced) users of Clojure. specs can be used to conform data in macros 
> instead of using a custom parser. And Clojure's macro expansion will 
> automatically use specs, when present, to explain errors to users. This 
> should result in a greatly improved experience for users when errors occur. 
> 
> More robust software 
> 
> Clojure has always been about simplifying the development of robust software. 
> In all languages, dynamic or not, tests are essential to quality - too many 
> critical properties are not captured by common type systems. spec has been 
> designed from the ground up to directly support generative testing via 
> test.check https://github.com/clojure/test.check. When you use spec you get 
> generative tests for free. 
> 
> Taken together, I think the features of spec demonstrate the ongoing 
> advantages of a powerful dynamic language like Clojure for building robust 
> software - superior expressivity, instrumentation-enhanced REPL-driven 
> development, sophisticated testing and more flexible systems. I encourage you 
> to read the spec rationale and overview  http://clojure.org/about/spec. Look 
> for spec's inclusion in the next alpha release of Clojure, within a day or 
> so. 
> 
> Note that spec is still alpha, and some details are likely to change. 
> Feedback welcome. 
> 
> I hope you find spec useful and powerful! 
> 
> Rich 
> 
> 
> -- 
> 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.

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