6.2.900.17
9 Typed Regions
The with-type form allows for localized Typed Racket regions in
otherwise untyped code.
(with-type result-spec fv-clause body ...+)
|
(with-type export-spec fv-clause body ...+) |
|
fv-clause | | = | | | | | | | | #:freevars ([id fv-type] ...) | | | | | | result-spec | | = | | #:result type | | | | | | export-spec | | = | | ([export-id export-type] ...) |
|
The first form, an expression, checks that
body ...+ has the type
type.
If the last expression in
body ...+ returns multiple values,
type must
be a type of the form
(values t ...).
Uses of the result values are appropriately checked by contracts generated from
type.
The second form, which can be used as a definition, checks that each of the export-ids
has the specified type. These types are also enforced in the surrounding code with contracts.
The ids are assumed to
have the types ascribed to them; these types are converted to contracts and checked dynamically.
Examples: |
> (with-type #:result Number 3) | 3 | | .../contract/region.rkt:696:62: contract violation | expected: Number | given: #f | in: the 1st argument of | (-> Number any) | contract from: (region typed-region) | blaming: top-level | (assuming the contract is correct) | | "hello, world" | | x: broke its own contract | promised: String | produced: 'hello | in: String | contract from: top-level | blaming: top-level | (assuming the contract is correct) | at: eval:5.0 | | | > (fun val) | 17 |
|