I recently ran into a problem that took me hours to diagnose. It turns out that a `#:with` clause in a syntax-parse was not matching, but I would never have guessed that from the error message I got.
Here is a simplified example:
(define-syntax-rule (my-fancy-macro syn ...) (begin syn ...))
(define-syntax (my-let syn)
(syntax-parse syn
#:literals (begin)
[(_ ([x e] ...) body)
#:with (lambda (y ...) (begin e^ ...))
(local-expand #`(lambda (x ...) (my-fancy-macro e ...)) 'expression null)
#`((lambda (y ...) body) e^ ...)]))
(my-let ([x 5]) x)
; /tmp/test.rkt:29.0: my-let: expected the identifier `begin'
; at: quote
; in: (my-let ((x 5)) x)
; Context: ....
It's not clear where "quote" comes from; it doesn't appear in the syntax I've
written
down or any of the patterns I've written, so it's totally useless for debugging.
It gets even worse when I remember I forgot to declare `lambda' as a literal:
(define-syntax (my-let syn)
(syntax-parse syn
#:literals (lambda begin)
[(_ ([x e] ...) body)
#:with (lambda (y ...) (begin e^ ...))
(local-expand #`(lambda (x ...) (my-fancy-macro e ...)) 'expression null)
#`((lambda (y ...) body) e^ ...)]))
(my-let ([x 5]) x)
; /tmp/test.rkt:29.0: my-let: expected the identifier `lambda
; at: lambda
; in: (my-let ((x 5)) x)
; Context: ....
So, we expected to see identifier that is there?
That's a strange error.
I'm not sure if this one is related, but it came up in the same debugging
session.
Is there anything to be done about these error message?
--
William J. Bowman
Northeastern University
College of Computer and Information Science
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.
signature.asc
Description: PGP signature

