[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: module: How to specify indirect exports positively?



Thank you very much for the instructive example-macro.

I have extended it a bit to make it export any number of
module-identifiers without their common prefix ... a functionality
that I'd like to see provided by mzscheme, too, because it's much
shorter than the equivalent rename-syntax. 

Following the working example. I've thrown some comments in just in
case somebody might find this useful.

Sebastian


(module A mzscheme

  (define-syntax provide-prefixless
    ;; <prefix> <identifier>+ -> unspecified
    ;; Export every <identifier> without its local <prefix>.
    (lambda (stx)
      (syntax-case stx ()
        ((_ pre e0 e1 ...)
         (letrec ((prefix  
                   ;; Make Prefix-String.
                   (symbol->string
                    (syntax-object->datum
                     (syntax pre))))
                  (prefixer
                   ;; <symbol> -> <list>
                   ;;  name -> (prefixed-name name)
                   (lambda (name)
                     (list (string->symbol
                            (string-append prefix
                                           (symbol->string name)))
                           name))))
           (syntax-case (map prefixer
                             (cddr (syntax-object->datum stx))) ()
             (((prefixed-name name) ...)
              (syntax (provide (rename prefixed-name name) 
                               ...)))))))))
  
  (provide-prefixless prefix: x y z)
  
  (define prefix:x 1)
  (define prefix:y 2)
  (define prefix:z 3))

(require A)
(list x y z)  ;; ==> (1 2 3)