I wonder if the right option is to push the macro-like functionality down into the language itself. Something like <a href="http:&#x2F;&#x2F;okmij.org&#x2F;ftp&#x2F;Computation&#x2F;free-monad.html" rel="nofollow">http:&#x2F;&#x2F;okmij.org&#x2F;ftp&#x2F;Computation&#x2F;free-monad.html</a> starts to offer very macro-like functionality, but deferred to runtime, so you can still look at the original value and even imbue its effects with a different set of semantics.