diff --git a/collects/redex/private/judgment-form.rkt b/collects/redex/private/judgment-form.rkt index 7133ae3c2b..98ce128a44 100644 --- a/collects/redex/private/judgment-form.rkt +++ b/collects/redex/private/judgment-form.rkt @@ -388,8 +388,11 @@ (define-syntax (define-relation stx) (syntax-case stx () [(def-form-id lang . body) - (let-values ([(contract-name dom-ctcs codom-contracts pats) - (split-out-contract stx (syntax-e #'def-form-id) #'body #t)]) + (begin + (unless (identifier? #'lang) + (raise-syntax-error #f "expected an identifier in the language position" stx #'lang)) + (define-values (contract-name dom-ctcs codom-contracts pats) + (split-out-contract stx (syntax-e #'def-form-id) #'body #t)) (with-syntax* ([((name trms ...) rest ...) (car pats)] [(mode-stx ...) #`(#:mode (name I))] [(ctc-stx ...) (if dom-ctcs diff --git a/collects/redex/tests/syn-err-tests/relation-definition.rktd b/collects/redex/tests/syn-err-tests/relation-definition.rktd index 891d848b7f..8b0ccecae5 100644 --- a/collects/redex/tests/syn-err-tests/relation-definition.rktd +++ b/collects/redex/tests/syn-err-tests/relation-definition.rktd @@ -24,3 +24,7 @@ first-where (where any_d any_b) first-post-where])) + +(#rx"expected an identifier in the language position" + ([not-lang [(R a)]]) + (define-relation not-lang))