28 lines
735 B
Scheme
28 lines
735 B
Scheme
#lang scheme/base
|
|
|
|
(require scheme/contract)
|
|
|
|
(provide require/doc
|
|
provide/doc)
|
|
|
|
(define-syntax-rule (require/doc spec ...)
|
|
(void (quote-syntax (require/doc spec ...))))
|
|
|
|
(define-syntax-rule (provide/doc [id contract desc] ...)
|
|
(begin
|
|
(void (quote-syntax (provide/doc [id contract desc] ...)))
|
|
(provide/contracted [id (strip-names contract)]) ...))
|
|
|
|
(define-syntax provide/contracted
|
|
(syntax-rules (->)
|
|
[(_ [(rename orig-id new-id) contract])
|
|
(provide/contract (rename orig-id new-id contract))]
|
|
[(_ [id contract])
|
|
(provide/contract [id contract])]))
|
|
|
|
(define-syntax strip-names
|
|
(syntax-rules (->)
|
|
[(_ (-> [id contract] ... result))
|
|
(-> contract ... result)]
|
|
[(_ other) other]))
|