Well, I think it depends on what you want to accomplish. For instance, there’s no saying that the best way to generate a custom version of a recursive spec is via overrides of its constituent parts. You could supply a new root level spec that generated compatible instances in a completely different (fixed or recursive) way.
As far as regex for overrides - they would have great expressivity but the tradeoffs would be a) having to exhaustively check them, and b) they are not guaranteed to uniquely match. I have been thinking about allowing overrides of (registered) spec *names* in addition to (and alongside) paths. These overrides would cut across any specs, wherever the named spec was used. > On May 26, 2016, at 3:04 AM, Christophe Grand <christo...@cgrand.net> wrote: > > Thank you Rich, here is why I wasn't at ease with generating all paths: > *recursion-limit* is documented as being a soft limit, so I don't know even a > lower bound or when to stop generating paths > > Suffix match wouldn't be a panacea, it's just a (bad) quickfix. > Paths form a regular language so regexes as keys in the override map would be > a better solution. > > It would allow overriding a spec based on its context (any ancestor) while > suffix match would only allow overriding a spec based on its closer ancestors > (so one would still need to generate paths or suffixes to emulate that). > > Christophe > > On Wed, May 25, 2016 at 6:48 PM, Rich Hickey <richhic...@gmail.com> wrote: > user=> (s/def ::a (s/or :r (s/cat :a ::a) > :k keyword?)) > :user/a > > user=> (binding [s/*recursion-limit* 2] > (map first (s/exercise ::a 10))) > > (((:B)) :? (:+/K) (:Xc_D.__.+HC/JaCD) ((:*3)) :gJ1z.o.+?.lC0/!-ZDN9 > :D.-?I.q8.z/-5* (:F67jy+2M.bB_.h62Cp+?._X?b6gv4.x+7.Gz_6.v9Tt15/*) > :!4J??+/-8?8_- ((:*JZAg**x!.qE3-.sh._?e/_!?T))) > > user=> (binding [s/*recursion-limit* 2] > (map first (s/exercise ::a 10 {[:k] (gen/return :k) > [:r :a :k] (gen/return :a) > [:r :a :r :a :k] (gen/return :aa)}))) > > (:k (:a) ((:aa)) :k :k :k :k :k (:a) :k) > > I’ll have to think about the suffixes > > > On May 25, 2016, at 7:56 AM, Christophe Grand <christo...@cgrand.net> wrote: > > > > Speaking of recursive definitions: how to provide an override in a > > recursive spec? > > Would it be possible to have path suffixes (in addition to paths not in > > replacement of) in the override map? > > > > Thanks, > > > > Christophe > > > > On Mon, May 23, 2016 at 6:16 PM, Alex Miller <a...@puredanger.com> wrote: > > Yes, you can create recursive definitions by registering a spec that refers > > to itself via registered name (a namespaced keyword). > > > > > > On Monday, May 23, 2016 at 11:13:24 AM UTC-5, Andrey Grin wrote: > > Is it planned to support recursive definitions? Example from.plumatic > > schema: > > > > (def BinaryTree > > > > ( > > maybe ;; any empty binary tree is represented by nil > > > > { > > :value > > long > > > > :left (recursive > > #'BinaryTree) > > > > :right (recursive #'BinaryTree)})) > > > > -- > > 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. > > > > > > > > -- > > On Clojure http://clj-me.cgrand.net/ > > Clojure Programming http://clojurebook.com > > Training, Consulting & Contracting http://lambdanext.eu/ > > > > -- > > 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. > > > > -- > On Clojure http://clj-me.cgrand.net/ > Clojure Programming http://clojurebook.com > Training, Consulting & Contracting http://lambdanext.eu/ > > -- > 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.