<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>It seems like “hygienic reader extensions” still work when a module-level definition conflicts with it, but it seems like if it’s a local binding the local binding overrides the one in the reader extension. </div><div><br></div>For example:<div><div><font face="Courier New">#lang rackjure</font></div><div><font face="Courier New">;; this works:</font></div><div><font face="Courier New">(define lambda "module-level-whatever")</font></div><div><font face="Courier New">#λ(void %1) ; #<procedure></font></div><div><font face="Courier New">;; this doesn't work</font></div><div><font face="Courier New">(let ([lambda "local-whatever"]</font></div><div><font face="Courier New"> [%1 void]</font></div><div><font face="Courier New"> [define-syntax void]</font></div><div><font face="Courier New"> [% void])</font></div><div><font face="Courier New"> #λ(void %1)) ; application: not a procedure;</font></div><div><font face="Courier New">; ; expected a procedure that can be applied to arguments</font></div><div><font face="Courier New">; ; given: "local-whatever"</font></div><div><font face="Courier New">; ; arguments…:</font></div></div><div><br></div><div>Why does it work at the module-level and not within a let? </div><div><br></div><div>Is this a bug, or should reader extensions not be used this way, or what? </div><div><br></div><div>What’s going on here?</div><div><br></div><div><br></div></body></html>