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.



Reply via email to