Macro-expanded lisp works surprisingly well as an intermediate representation for some tasks.
Today, I was able to enumerate all the bound variables pretty straightforwardly, because elisp only has four ways of introducing bindings!
(let, let*, lambda and condition-case)
miniblog.
Related Posts
I'm playing with DOT output for debugging syntax trees from difftastic. Here's an F# snippet, the Debug representation, and the DOT rendered as an image.
I'm pleased with the information density on the graphic, but we'll see how often I end up using it.
Noodling with an interpreter for a statically typed language with reified types (e.g. a list knows what type it contains).
Currently I have a single representation of types in both the runtime and the type checker. I think that's a good thing?
Effects and code as a database in Unison: https://jaredforsyth.com/posts/whats-cool-about-unison/
Unison is looking at changing their program representation to plain sqlite!





