www

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

reqprov.rkt (1263B)


      1 #lang racket/base
      2 
      3 (require racket/require-syntax
      4          racket/provide-syntax
      5          (for-syntax racket/base
      6                      racket/provide-transform
      7                      racket/syntax
      8                      syntax/parse))
      9 
     10 (provide expander-in
     11          expander-out)
     12 
     13 (define-for-syntax (reqprov-transformer2 id combiner prefix)
     14   (with-syntax
     15       ([id-expander-type (format-id id "~a-expander-type" id)]
     16        [make-id-expander (format-id id "make-~a-expander" id)]
     17        [id-expander? (format-id id "~a-expander?" id)]
     18        [define-id-expander (format-id id "define-~a-expander" id)]
     19        [expand-all-id-expanders (format-id id "expand-all-~a-expanders" id)])
     20     #`(#,combiner (for-syntax (#,@prefix id-expander-type))
     21                   (for-syntax (#,@prefix make-id-expander))
     22                   (for-syntax (#,@prefix id-expander?))
     23                   (#,@prefix define-id-expander)
     24                   (for-syntax (#,@prefix expand-all-id-expanders)))))
     25 
     26 (define-require-syntax expander-in
     27   (syntax-parser
     28     [(_ require-spec id:id)
     29      (reqprov-transformer2 #'id #'combine-in #'(only-in require-spec))]))
     30 
     31 (define-provide-syntax expander-out
     32   (syntax-parser
     33     [(_ id:id)
     34      (reqprov-transformer2 #'id #'combine-out #'(combine-out))]))