PasteRack.org
Paste # 83182
2014-09-19 00:33:57

Fork as a new paste.

Paste viewed 21 times.


Embed:

  1. #lang racket
  2.  
  3. (require (for-syntax racket/syntax))
  4.  
  5. (define-syntax (make-sig stx)
  6.   (syntax-case stx ()
  7.     [(_ id)
  8.      (let ()
  9.        (define sig-name (format-id stx "~a^" (syntax->datum #'id)))
  10.        #`(define-signature #,sig-name (id)))]))
  11.  
  12. (make-sig a)
  13. (make-sig b)
  14. (make-sig c)
  15. (make-sig d)
  16. (make-sig e)
  17. (make-sig f)
  18.  
  19.  
  20. (define u
  21.   (unit (import)
  22.         (export a^ b^ c^ d^ e^ f^)
  23.         (define-values (a b c d e f) (values 1 2 3 4 5 6))))
  24.  
  25. (define-unit/new-import-export u2
  26.   (import)
  27.   (export a^ b^)
  28.   ((a^ b^) u))
  29.  
  30. (define-values/invoke-unit/infer u2)
  31.  
  32. ;; a and b are now defined
  33. ;; but none of c d e or f

=>