Provide require/typed/provide and require-typed-struct/provide from TR.

original commit: 593e4a4f1d4c8bd663d24d45d6c4190c1ce2c86a
This commit is contained in:
Vincent St-Amour 2012-02-10 11:09:11 -05:00
parent 7c863cc080
commit 7e9caf4eaf
4 changed files with 22 additions and 15 deletions

View File

@ -150,6 +150,21 @@ This file defines two sorts of primitives. All of them are provided into any mod
'typechecker:ignore #t)))))]))
(values (r/t-maker #t) (r/t-maker #f))))
(define-syntax-rule (require/typed/provide lib [nm t] ...)
(begin
(require/typed lib [nm t] ...)
(provide nm ...)))
(define-syntax require-typed-struct/provide
(syntax-rules ()
[(_ (nm par) . rest)
(begin (require-typed-struct (nm par) . rest)
(provide (struct-out nm)))]
[(_ nm . rest)
(begin (require-typed-struct nm . rest)
(provide (struct-out nm)))]))
(define-syntax (define-predicate stx)
(syntax-parse stx
[(_ name:id ty:expr)

View File

@ -14,6 +14,8 @@ compatibility.
keyword with @racket[require/typed].}
@defidform[require-typed-struct]{Similar to using the @racket[struct]
keyword with @racket[require/typed].}
@defidform[require-typed-struct/provide]{Similar to
@racket[require-typed-struct], but also provides the imported identifiers.}
@defidform[pdefine:]{Defines a polymorphic function.}
@defform[(pred t)]{Equivalent to @racket[(Any -> Boolean : t)].}

View File

@ -391,6 +391,10 @@ a @racket[require/typed] form. Here is an example of using
@racket[file-or-directory-modify-seconds] has some arguments which are optional,
so we need to use @racket[case->].}
@defform[(require/typed/provide m rt-clause ...)]{
Similar to @racket[require/typed], but also provides the imported identifiers.
}
@section{Other Forms}
@defidform[with-handlers]{

View File

@ -3,18 +3,4 @@
(define-syntax-rule (dt nm t)
(begin (define-type-alias nm t) (provide nm)))
(define-syntax-rule (require/typed/provide lib [nm t] ...)
(begin
(require/typed lib [nm t] ...)
(provide nm ...)))
(define-syntax require-typed-struct/provide
(syntax-rules ()
[(_ (nm par) . rest)
(begin (require-typed-struct (nm par) . rest)
(provide (struct-out nm)))]
[(_ nm . rest)
(begin (require-typed-struct nm . rest)
(provide (struct-out nm)))]))
(provide dt require/typed/provide require-typed-struct/provide)
(provide dt)