Hi, I just rediscovered this message, sorry for the long delay.
Stephen Compall <[EMAIL PROTECTED]> writes: > Issue most easily explained with a simple reproduction: > > guile> (use-syntax (ice-9 syncase)) > guile> (@ (guile) car) > ERROR: invalid syntax #<variable b7c50a40 value: #<primitive-procedure car>> OTOH, you can (should?) use `use-modules': guile> (use-modules (ice-9 syncase)) guile> (define-syntax foo (syntax-rules () ((_ x ...) (x ...)))) guile> foo #<macro! sc-macro> guile> (foo + 2 3) 5 guile> (@ (guile) car) #<primitive-procedure car> I don't even understand what the difference is between using `use-modules' and `use-syntax' for `(ice-9 syncase)'. There's this `expansion-eval-closure' fluid that's being used, but it doesn't seem to change the module where top-level bindings are resolved, as one might think: guile> (define-module (x) :use-syntax (ice-9 syncase)) #<directory (x) b7a7d110> guile> (define (+ . args) 'plus) guile> (define-syntax foo (syntax-rules () ((_ x ...) (+ x ...)))) guile> (export-syntax foo) guile> (foo 1 2 3) plus guile> (set-current-module (resolve-module '(guile-user))) #<directory (x) b7a7d110> guile> (use-modules (x)) guile> (foo 1 2 3) 6 ;; <--- `+' is resolved in `(guile-user)', not in `(x)' This per-module syntax transformer, `use-syntax' and friends all look pretty pointless to me. Thanks, Ludovic.
