Add #:omit-define-syntaxes to define-type.

original commit: ecf02a32b4e2431e57f77da4f497fcb8f62426ec
This commit is contained in:
Sam Tobin-Hochstadt 2013-04-21 15:39:38 -04:00
parent 20a01d0a03
commit c0b5f31c90
3 changed files with 24 additions and 5 deletions

View File

@ -0,0 +1,9 @@
#lang typed/racket
(define-syntax (x stx) #'5)
(define-type x Number #:omit-define-syntaxes)
(ann 7 x)
(add1 x)

View File

@ -450,9 +450,13 @@ This file defines two sorts of primitives. All of them are provided into any mod
(define-syntax (define-type-alias stx)
(syntax-parse stx
[(_ tname:id rest)
[(_ tname:id rest (~optional (~and omit #:omit-define-syntaxes)
#:defaults
([omit #f])))
#`(begin
#,(ignore #'(define-syntax tname (lambda (stx) (raise-syntax-error 'type-check "type name used out of context" stx))))
#,(if (not (attribute omit))
(ignore #'(define-syntax tname (lambda (stx) (raise-syntax-error 'type-check "type name used out of context" stx))))
#'(begin))
#,(internal (syntax/loc stx (define-type-alias-internal tname rest))))]
[(_ (tname:id args:id ...) rest)
(syntax/loc stx (define-type-alias tname (All (args ...) rest)))]))

View File

@ -285,8 +285,10 @@ corresponding to @racket[define-struct].}
The procdure @racket[e] is used as the value for @racket[prop:procedure], and must have type @racket[proc-t].}
@section{Names for Types}
@defform*[[(define-type name t)
(define-type (name v ...) t)]]{
@defform*[[(define-type name t maybe-omit-def)
(define-type (name v ...) t maybe-omit-def)]
#:grammar
[(maybe-omit-def (code:line #:omit-define-syntaxes) (code:line))]]{
The first form defines @racket[name] as type, with the same meaning as
@racket[t]. The second form is equivalent to
@racket[(define-type name (All (v ...) t))]. Type names may
@ -294,7 +296,11 @@ refer to other types defined in the same module, but
cycles among them are prohibited.
@ex[(define-type IntStr (U Integer String))
(define-type (ListofPairs A) (Listof (Pair A A)))]}
(define-type (ListofPairs A) (Listof (Pair A A)))]
If @racket[#:omit-define-syntaxes] is specified, no definition of
@racket[name] is created. In this case, some other definition of @racket[name]
is necessary.}
@section{Generating Predicates Automatically}