I forgot to explain why this fails: At Fri, 25 Aug 2017 14:59:14 +0200, Konrad Hinsen wrote: > (eval-syntax > (parameterize ([read-accept-lang #t] > [read-accept-reader #t]) > (read-syntax "test-module" > (open-input-string "#lang > scribble/base\n@section[Introduction]"))) > (module->namespace 'racket/base)) > > only says > > ; test-module::1: module: unbound identifier; > ; also, no #%app syntax transformer is bound > ; at: module > > although both module and %app are defined in racket/base.
The `eval-syntax` function refrains from adding any scopes to the given syntax object before trying to expand it. So, it doesn't add the scope for the namespace's top-level bindings (unlike `eval`, which does add that scope before trying to expand). That's why `#%app` and `module` are not bound when trying to expand the syntax object in the above example; the syntax object has no scopes and therefore no bindings. The `check-module-form` function adds a suitable scope to the `module` binding in the given syntax object. It would work just as well to not use `check-module-form` and to use `eval` so that the `module` binding is taken from the namespace. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.