Awesome, thanks!  I had misunderstood where the idea of a sequence was 
created (the sequential context as you put it).

On Monday, May 23, 2016 at 12:28:32 PM UTC-7, Alex Miller wrote:
>
> Yeah, nested regexes are one of the places people are most likely to be 
> tripped up. 
>
> One of those inner lists could be speced as:
>
> (def string-list (s/* string?)) 
>
> ;; or as (s/coll-of string?) - not a strong preference in this particular 
> case but there are tradeoffs
>
> And then the outer list is something like this:
>
> (def outer (s/* (s/spec string-list))
>
> where the s/spec is the key thing - that creates a new "sequential 
> context". Otherwise, the string-list regex ops become part of the outer 
> regex ops.
>
> One difference here will be that the spec above will conform the 
> string-list to a vector (as all sequential things conform to a vector). The 
> coll-of approach would give you control over that though:
>
> (s/conform (s/* (s/coll-of string? ())) ['("a" "b" "c") '("d" "e" "f")])
> => [("a" "b" "c") ("d" "e" "f")]
>
> The benefit of using s/* in string-list is that if you wanted to include 
> string-list inside another regex you could but with coll-of, it would 
> always start a new collection:
>
> (s/conform (s/cat :num integer? :strs string-list) [100 "a" "b"])
> => {:num 100, :strs ["a" "b"]}
>
> So, tradeoffs.
>
> On Monday, May 23, 2016 at 2:08:49 PM UTC-5, scott stackelhouse wrote:
>>
>> Could someone describe what a spec of a seq in a seq would look like? 
>>  i.e. ['("a" "b" "c") '("d" "e" "f")].  I'm not quite "getting it."
>>
>> --Scott
>>
>> On Monday, May 23, 2016 at 7:12:29 AM UTC-7, 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.

Reply via email to