@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.

Reply via email to