You can’t give the same qualified spec name two meanings, that’s a main point of spec. However, your actual use case you use unqualified :attack in two different contexts. - just don’t map them to the same spec. Note that ::kw is just a shorthand in the examples for fully-qualified keys, they need not be in the same ns.
e.g. register specs under :my.simple/attack :my.complex/attack and then in one context use (keys :req-un [:my.simple/attack …]) and in the other (keys :req-un [:my.complex/attack …]) > On May 27, 2016, at 3:36 AM, Pedro Santos <donbonifa...@gmail.com> wrote: > > Hello, > > How can I differentiate between the same keyword, but with difference > semantics? Example: > > {:attack 100 > :bonus {:attack {:category {:heavy 100}}}} > > I have: > (s/def ::attack (s/and pos? #(<= 1 1000)) > (s/def ::bonus (s/keys :req-un [::attack ; <--- > > Is there a way to do this? > > -- > > Another question: is there a way to spec a fn that handles channels? > Something like: > > (s/fdef some-fn > :args (s/cat :ch (s/chan ::unq/model)) > :ret (s/chan :unq/model)) > > -- > > And yet another: I have a game project with some test.check scenarios. The > test run takes 8s without instrumenting and 22s with instrumentation, and > this makes me think on starting to split tests in test suites. Is there > something to handle this in clojure.test? > > Thanks! > > > On Thu, May 26, 2016 at 7:00 PM Beau Fabry <imf...@gmail.com> wrote: > I'm in a similar position to you Wesley, I'm all for generative testing, but > sometimes I prefer not to spec out the full depth of the tree (ie some input > leaves with s/Any) and just turn on validation in staging and see what > happens. The cpu-time wasted there doesn't matter much to me. Looking forward > to seeing where things end up. Spec certainly seems really well thought > through. > > Aside: Great work on the docs Alex. Much much more comprehensive and readable > than is usually available for an alpha feature in *any* language. > > > On Thursday, May 26, 2016 at 6:57:24 AM UTC-7, Wesley Hall wrote: > Thanks Rich, for this and your work in general. After 15 years of working > with Java, it has been a real joy to find clojure (let's face it, that pun > alone is pure gold!). > > I might try my hand at the macrology you describe as an exercise... everybody > stand well back.... > > On Thursday, 26 May 2016 14:43:04 UTC+1, Rich Hickey wrote: > If you name (register) your (sub)specs with s/def and you can reuse them as > much as you like. > > (s/def ::argi (s/cat :i integer?)) > (s/def ::fnii (s/fspec :args ::argi :ret integer?)) > (s/conform ::fnii +) > (s/valid? ::argi '(42)) > > However you are talking about calling ‘instrument’ so I don’t think you are > in the HOF case. So you shouldn’t be using fspec but fdef: > > (s/fdef fooi :args (s/cat :i integer?) :ret integer?) > > (defn fooi [i] > (let [spec (-> `fooi s/fn-specs :args)] > (assert (s/valid? spec (list i)) (s/explain-str spec (list i)))) > 42) > > (fooi "42") > user=> AssertionError Assert failed: In: [0] val: "42" fails at: [:i] > predicate: integer? > > Obviously some macrology could make this more succinct, as is being discussed > elsewhere. > > > On May 26, 2016, at 9:17 AM, Wesley Hall <wesle...@gmail.com> wrote: > > > > spec is not a contract system. > > > > Forgive me for I am about to sin :). > > > > I have a little RPC framework that I use to do simple remoting between > > clojurescript in the browser and ring based web services. I'm currently > > using schema to validate arguments received from clients and return > > appropriate exceptions upon non-conforming invocations. > > > > The idea of being able to perform generative testing against a > > specification for these functions is really appealing but if I am using > > generative testing to verify that my functions behave properly if invoked > > as intended it does feel like there would be some benefit to ensuring that > > the conditions under which the function has been tested are enforced at > > runtime for those functions on the edges of my API. > > > > I'd definitely prefer a manual conformity check over instrumentation in > > these cases, but it seems like an fspec cannot be used for this purpose > > (from within the function itself). I'd rather not define my specs twice. > > > > Seems like I might be destined to make cheeky instrument calls after each > > of these edge functions, in the same was the always-validate metadata is > > used in schema. > > > > Do I have a desperate need to be convinced otherwise? :) > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@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+u...@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+u...@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. > > -- > 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.