40 lines
800 B
Racket
40 lines
800 B
Racket
(module test mzscheme
|
|
(require mzlib/unit)
|
|
|
|
(provide s)
|
|
|
|
(define x add1)
|
|
|
|
(define-signature s
|
|
(a
|
|
(define-values (y) (x a))
|
|
(define-syntaxes (z)
|
|
(syntax-rules () ((_) (x a)))))))
|
|
|
|
(module test2 mzscheme
|
|
(require mzlib/unit
|
|
'test)
|
|
(define-unit u1 (import) (export s)
|
|
(define a 1))
|
|
(define-unit u2 (import s) (export)
|
|
(+ y (z)))
|
|
(define-compound-unit u3 (import) (export)
|
|
(link (((S : s)) u1)
|
|
(() u2 S)))
|
|
(printf "~a~n" (invoke-unit u3))
|
|
)
|
|
|
|
;; 4
|
|
(require 'test2)
|
|
|
|
(module test3 mzscheme
|
|
(require mzlib/unit
|
|
'test)
|
|
(define-unit u1 (import) (export s)
|
|
(define a 1))
|
|
(define-values/invoke-unit u1 (import) (export (rename s)))
|
|
(printf "~a~n" (+ y (z)))
|
|
)
|
|
;;4
|
|
(require 'test3)
|