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

This commit is contained in:
Vincent St-Amour 2012-02-10 11:09:11 -05:00
parent 03ebf0d3de
commit 593e4a4f1d
5 changed files with 23 additions and 17 deletions

View File

@ -1,7 +1,6 @@
#lang typed/racket/base #lang typed/racket/base
(require typed/private/utils (require (except-in "deep-flomap-untyped-parameters.rkt"
(except-in "deep-flomap-untyped-parameters.rkt"
light-direction light-intensity ambient-intensity reflected-intensity light-direction light-intensity ambient-intensity reflected-intensity
refractive-index ideal-reflectance ideal-transmission transmission-density refractive-index ideal-reflectance ideal-transmission transmission-density
specular-reflectance specular-roughness specular-purity specular-reflectance specular-roughness specular-purity

View File

@ -150,6 +150,21 @@ This file defines two sorts of primitives. All of them are provided into any mod
'typechecker:ignore #t)))))])) 'typechecker:ignore #t)))))]))
(values (r/t-maker #t) (r/t-maker #f)))) (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) (define-syntax (define-predicate stx)
(syntax-parse stx (syntax-parse stx
[(_ name:id ty:expr) [(_ name:id ty:expr)

View File

@ -14,6 +14,8 @@ compatibility.
keyword with @racket[require/typed].} keyword with @racket[require/typed].}
@defidform[require-typed-struct]{Similar to using the @racket[struct] @defidform[require-typed-struct]{Similar to using the @racket[struct]
keyword with @racket[require/typed].} 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.} @defidform[pdefine:]{Defines a polymorphic function.}
@defform[(pred t)]{Equivalent to @racket[(Any -> Boolean : t)].} @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, @racket[file-or-directory-modify-seconds] has some arguments which are optional,
so we need to use @racket[case->].} 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} @section{Other Forms}
@defidform[with-handlers]{ @defidform[with-handlers]{

View File

@ -3,18 +3,4 @@
(define-syntax-rule (dt nm t) (define-syntax-rule (dt nm t)
(begin (define-type-alias nm t) (provide nm))) (begin (define-type-alias nm t) (provide nm)))
(define-syntax-rule (require/typed/provide lib [nm t] ...) (provide dt)
(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)