Thanks Juan! This works in Clojure, but it doesn't work for me in Clojurescript due to the use of "resolve"
" Assert failed: Argument to resolve must be a quoted symbol" This is where I got stuck too. It looks like spec does have access to the predicate at runtime (after all, it can figure out the right spec when I call 'valid', etc), but there doesn't seem to be a way for a caller to get access to that predicate. If there was, I think this would be solvable. Andy - yes, you're right, a tool like eastwood could inspect the AST and catch this. Maybe that's the best approach if the spec registry and spec implementations don't expose the information to support a linter like this. On Friday, December 8, 2017 at 7:42:33 AM UTC-7, Juan Monetta wrote: > > I added some stuff on > https://gist.github.com/stuarthalloway/f4c4297d344651c99827769e1c3d34e9 > <https://www.google.com/url?q=https%3A%2F%2Fgist.github.com%2Fstuarthalloway%2Ff4c4297d344651c99827769e1c3d34e9&sa=D&sntz=1&usg=AFQjCNGXTCMwQ9mbAmnQCp0weAk5SGQW4g> > that > makes your example work I think. > > We can use in Clojure and ClojureScript something like: > > (defn multi-spec-sub-specs > "Given a multi-spec form, call its multi method methods to retrieve > its subspecs in the form of [multi-method-key sub-spec-form]." > [multi-spec-form] > (let [[_ multi-method-symbol & _] multi-spec-form] > (->> (resolve multi-method-symbol) > deref > methods > (map (fn [[spec-k method]] > [spec-k (s/form (method nil))]))))) > > to go down inside multi-specs. > > Juan > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
