[racket] module-level definitions vs. local definitions and how binding works

From: Alexander D. Knauth (alexander at knauth.org)
Date: Sun Jul 27 20:10:48 EDT 2014

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.  

For example:
#lang rackjure
;; this works:
(define lambda "module-level-whatever")
#λ(void %1) ; #<procedure>
;; this doesn't work
(let ([lambda "local-whatever"]
      [%1 void]
      [define-syntax void]
      [% void])
  #λ(void %1)) ; application: not a procedure;
;              ;   expected a procedure that can be applied to arguments
;              ;   given: "local-whatever"
;              ;   arguments…:

Why does it work at the module-level and not within a let? 

Is this a bug, or should reader extensions not be used this way, or what?  

What’s going on here?


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140727/eb825ea1/attachment.html>

Posted on the users mailing list.