From e16bb4c48044487706e4569903a2a607fa6c9881 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 16 Mar 2016 21:56:56 -0700 Subject: [PATCH] generalize `br:define` --- br/define.rkt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/br/define.rkt b/br/define.rkt index 25e1c2d..99f8ca2 100644 --- a/br/define.rkt +++ b/br/define.rkt @@ -10,8 +10,10 @@ (syntax-parse stx #:literals (syntax) - [(_ (syntax (id pat-arg ...)) (syntax body ...)) ; (define #'(foo arg) #'(+ arg arg)) - #'(define-syntax-rule (id pat-arg ...) body ...)] + [(_ (syntax (id pat-arg ...)) body ...) ; (define #'(foo arg) #'(+ arg arg)) + #'(define-syntax id (λ (stx) + (syntax-case stx () + [(_ pat-arg ...) body ...])))] [(_ sid:syntaxed-id sid2:syntaxed-id) ; (define #'f1 #'f2) #'(define-syntax sid.name (make-rename-transformer sid2))] @@ -37,5 +39,9 @@ (check-equal? (plusser 42) +) (check-equal? (times 10) 100) (check-equal? (timeser 12) 144) + (check-equal? (let () + (br:define #'(foo x) + (with-syntax ([zam +]) + #'(zam x x))) (foo 42)) 84) ;; todo: error from define not trapped by check-exn - #;(check-exn exn:fail:syntax? (λ _ (br:define (#'times stx stx2) #'*)))) \ No newline at end of file + #;(check-exn exn:fail:syntax? (λ _ (br:define (#'times stx stx2) #'*))))