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.

Reply via email to