Here is a syntax-parse macro that requires one subexpression to be wrapped with an exclamation point.
(define-syntax (test stx) (syntax-parse stx #:datum-literals (!) [((~or (~once (! x:expr) #:name "!") (~not (! y:expr))) ...) #'42])) Everything works like I would expect: (test (! 1) (! 2)) => test: too many occurrences of ! in: () (test (! 1) 2) => 42 (test 1 2) => test: missing required occurrence of ! in: () Here is the same macro but with an extra ~seq and an extra pair of parens around the pattern: (define-syntax (test stx) (syntax-parse stx #:datum-literals (!) [((~seq (~or (~once (! x:expr) #:name "!") (~not (! y:expr))) ...)) #'42])) Here are the same tests: (test (! 1) (! 2)) => test: too many occurrences of ! in: () (test (! 1) 2) => 42 (test 1 2) => test: bad syntax in: (test 1 2) I expected the same outputs as the first macro, but the last test example only reports "bad syntax" and not "too few". Is this expected behavior that I'm not understanding or a bug? _________________________ Racket Developers list: http://lists.racket-lang.org/dev