Instead of "static type advocate", maybe we should call them "metaprogramming deniers". Then there are the metaprogramming deniers who don't even advocate static types. Morons.
-
Show this thread
-
I’ve been thinking about this. Except for code instrumentation and trivial boilerplate generation I’ve never missed macros. Can you come up with a problem that macros solve that isn’t solved by (maybe free monadic, but also plain old) ADT DSLs + interpreters?
2 replies 0 retweets 0 likes -
Replying to @pkamenarsky @msimoni
Interpreters? Macros are compilers. Incrementally defined. Extensible. With no syntactic overhead. But yeah, if you can use interpreters, one will suffice to solve all issues: a Lisp interpreter. (If you can't, or simply don't, your effective language isn't Turing-complete.)
1 reply 0 retweets 0 likes -
Yeah, I know what macros are :) I was asking for a concrete example when a ADT DSL wouldn’t suffice, because frankly I can’t come up with one (except for the aforementioned two cases).
3 replies 0 retweets 0 likes -
Replying to @pkamenarsky @msimoni
For a cool use of macros, see my ILC 2012 paper where I automatically transform data structure libraries between pure and stateful styles and object oriented and type class styles.
2 replies 0 retweets 1 like -
That’s what I’m looking for, thanks!
1 reply 0 retweets 0 likes -
Replying to @pkamenarsky @msimoni
You'll tell me "it's type-directed code transformation!" — Yes, precisely. But also type transformation. Which requires types as first-class values as manipulated by macros.
1 reply 0 retweets 0 likes -
I haven’t read the paper so can’t comment yet, but “types as first class values” sound like type-level functions/type families/dependent types to me?
2 replies 0 retweets 0 likes -
If I understand correctly, the gist of the paper is the following generic transformation: (a -> a) -> (a -> IORef a -> IO ()) and its reverse, correct? Related to that, what is the difference between typeclasses and your interface passing convention?
2 replies 0 retweets 0 likes
My interface passing convention is the way that typeclasses are implemented in Common Lisp (or in Core Haskell). Since CL (like Core Haskell) doesn't (at this time) support type-directed implicit arguments, an explicit argument is being passed instead.
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.
Read my blog!