I don&#x27;t have a macroexpand function and the self-imposed limit on the number of primitive functions (32 language-related + 16 OS-related) has already been reached! Having a whitelist for macros whose expansion should be traced would be good as there&#x27;s a lot of noise.<p>&quot;Non-intrusive&quot; tracing of any expression can be done, using an @ prefix, based on this:<p><pre><code>    (extend-parser
      &quot;@&quot;
      (mac (x)
          `(let once ,x
                (seq (eprintln &quot;TRACE: &quot; once)
                     once))))</code></pre>
e.g.<p><pre><code>    (def third (div 100.0 3.0))
    =&gt; TRUE

    (add @(mul third 2.0) third)
    TRACE: 66.66666666666667
    =&gt; 100.0
</code></pre>
That&#x27;s a good point that you mention tracing needing to be toggleable - it&#x27;d be nice to be able to leave all the @s in code. I guess the macro for &quot;@&quot; could either be conditionally replaced with an effective no-op, or it could internally check for the existence of (or truthiness of) a global tracing-enabled definition.