PasteRack.org
Paste # 24047
2016-06-16 15:04:29

Fork as a new paste.

Paste viewed 720 times.


Embed:

meta-language

  1. #lang racket
  2.  
  3. (module mylang racket
  4.   (provide (rename-out [-#%module-begin #%module-begin]))
  5.   (require (for-syntax syntax/strip-context))
  6.   (define-syntax (-#%module-begin stx)
  7.     (syntax-case stx ()
  8.       [(_ lng . rest)
  9.        (let ([lng-sym (syntax-e #'lng)])
  10.          ;(dynamic-require lng-sym 0)
  11.          (namespace-require `(for-meta -1 ,lng-sym))
  12.          (with-syntax ([mb (namespace-symbol->identifier '#%module-begin)])
  13.            #`(mb . #,(replace-context #'mb #'rest))))])))
  14.  
  15. (module foo (submod ".." mylang) typed/racket/base
  16.   (ann (+ 1) Number))
  17.  
  18. (require 'foo)

=>

1