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.