www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

same-id-pattern.rkt (428B)


      1 #lang racket
      2 (provide ~same-free-id)
      3 
      4 (require syntax/parse)
      5 
      6 (define-splicing-syntax-class (same-free-id f)
      7   #:description (format "the identifier ~a"
      8                         (syntax-e f))
      9   (pattern x #:when (and (identifier? #'x) (free-identifier=? #'x f))))
     10 
     11 (define-syntax ~same-free-id
     12   (pattern-expander
     13    (λ (stx)
     14      (syntax-case stx ()
     15        [(_ pvar) (identifier? #'pvar) #'{~var || (same-free-id #'pvar)}]))))