According to the docs for syntax-parse/#:literals [1], "syntax-parse requires all literals to have a binding", and "the syntax-patterns are interpreted as if each occurrence of pattern-id were replaced with the following pattern: (~literal literal-id #:phase phase-expr)"
So, this error makes sense, because foo has no binding: > (require syntax/parse) > (syntax-parse #'(a foo b) #:literals (foo) [(x foo y) 'ok]) ; readline-input:31:38: syntax-parse: literal is unbound in phase 0 (phase 0 relative to the enclosing module) at: foo but when I use the expanded version, there is no error: > (syntax-parse #'(a foo b) [(x (~literal foo) y) 'ok]) 'ok > (syntax-parse #'(a foo b) [(x (~literal foo #:phase 0) y) 'ok]) 'ok > (syntax-parse #'(a foo b) [(x (~literal foo #:phase 1) y) 'ok]) 'ok What am I missing here? [1] https://docs.racket-lang.org/syntax/Parsing_Syntax.html#(form._((lib._syntax%2Fparse..rkt)._syntax-parse)) -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/sigid.2705c4f2af.20210312172948.GA5134%40papaya.papaya.