@Joel: While on IRC, I completely misunderstood you.
Now, after looking at it again, it makes sense. This is very cool -- because making it a macro forces it to be evaluated at compile time, when the source is available. Very nice. :-) @Andy Thanks! I will look into load-libs. The following is a bit vague-ish not on purpose, but because part of it works, part of it is still being hacked together. ## stuff I have: This is how my current pattern matching / object system looks like: https://gist.github.com/txrev319/9086538 In a very hackish and theoretically unsound way, each hash-map is an "object" and the :tag field represents the "type" of the object. ## stuff that are vague because I'm still hacking them together / thinking about them ### missing feature 1 now, I want to be able to say things like: :animal = [:cat :dog :mouse] then, if I do: (hmatch obj :animal :dog ... :cat ... ) I want it to give me an error of: "hey, you're not matching against :mouse" -- and I want this to happen at COMPILE time, not at run time ### missing feature 2 using standard Hindley-Milner, and using the ":tag" field as the type, I want to be able to tag a function as having a certain type, and have it verified at compile time -- this is purely optional type checking a common pattern I run into is: (async/go (loop [msg (<! some-chan)] (hmatch ... [:dog ... ] (call-other-function msg) ...))) now, when I pull the msg off the channel, I have no idea what type it is -- and that is fine. However, I'd prefer to verify, at compile time, that "call-other-function" has type ":dog -> :something" ### in summary, I'm basically hacking together poor-man's pattern matching (done) and type checking (still need more hacking). The idea is: * I want a dynamically typed langauge * I want to be able to say: "for this subset of functions, they have type signatures, and we can catch errors statically" (<-- and these choices are completely adhoc, based on what errors I waste time catching) On Tue, Feb 18, 2014 at 9:15 PM, Andy Fingerhut <andy.finger...@gmail.com> wrote: > I am not sure about ClojureScript, but in Clojure/Java you can use > alter-var-root to change the definition of load-libs, which is called by > both require and use. You can use alter-var-root to change the definition > of any function you want in clojure.core or any other namespace. I wouldn't > recommend going crazy with it, but it should be able to do the job, at least > after the alter-var-root takes effect. > > Out of curiosity, what kind of linting does your function do? > > Andy > > > On Tue, Feb 18, 2014 at 8:41 PM, t x <txrev...@gmail.com> wrote: >> >> With apologies for spamming: >> >> Solutions that involves installing a new lein plugin is fine too. >> >> I'm willing to completely re-organize my workflow in order to >> >> * have some other piece of Clojure code gets called / do >> verification whenever a clojure namespace is required/loaded/reloaded >> >> / Done spamming. >> >> On Tue, Feb 18, 2014 at 8:38 PM, t x <txrev...@gmail.com> wrote: >> > As a point of clarification, read-string is not a hard requirement. >> > Just getting the name of the namespace (and walking through the >> > symbols + calling source on each of them to get the source code is >> > perfeclty fine). >> > >> > Basically, I want to hook a function that >> > * gets called every time a namespace is loaded/required/reloaded >> > * gets passed the namespace >> > >> > Thanks! >> > >> > On Tue, Feb 18, 2014 at 8:32 PM, t x <txrev...@gmail.com> wrote: >> >> Hi, >> >> >> >> Although solutions not involving cljx are perfectly fine, I'm using >> >> cljx -- so solutions that involves hooking into cljx are perfectly >> >> fine too. >> >> >> >> I have my own "poor-man's lint / type checker" (with different >> >> objectives from core.typed). I want a certain function (call it >> >> CHECKER) to be called every time a namespace has been "required / >> >> loaded / reloaded" >> >> >> >> Every time I require/load/reload a namespace, I want the following to >> >> happen: >> >> >> >> (CHECKER ... source code of the namesapce) >> >> >> >> i.e. something like >> >> >> >> (CHECKER (read-string "namesapce-just-loaded.clj")) >> >> >> >> Then, if CHECKER throws an exception, it should be a compile error. If >> >> CHECKER prints stuff out, it should go into the "lein repl" stdout, >> >> and if CHECKER doesn't do anything, it's assumed that the namespace >> >> passed the check. >> >> >> >> Is there a minimal example somewhere of how this works? (i.e. >> >> something as stupid as: "this example calls a function, which just >> >> prints out the name of all functions defined" would be extremely >> >> helpful). >> >> >> >> Thanks! >> >> -- >> 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/groups/opt_out. > > > -- > 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/groups/opt_out. -- 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/groups/opt_out.