▼ |  | The Typed Racket Reference

1 | Type Reference
2 | Special Form Reference
3 | Libraries Provided With Typed Racket
4 | Utilities
5 | Exploring Types
6 | Typed Racket Syntax Without Type Checking
7 | Typed Regions
8 | Optimization in Typed Racket
9 | Legacy Forms
10 | Compatibility Languages
11 | Experimental Features

► | 3 | Libraries Provided With Typed Racket

3.1 | Porting Untyped Modules to Typed Racket

On this page:

3.1`` Porting Untyped Modules to Typed Racket

5.92
top ← prev up next →

### 3`` Libraries Provided With Typed Racket

The typed/racket language corresponds to the racket language—that is, any identifier provided by racket, such as modulo is available by default in typed/racket.

> #lang typed/racket
> (modulo 12 2)

The typed/racket/base language corresponds to the racket/base language.

Some libraries have counterparts in the typed collection, which provide the same exports as the untyped versions. Such libraries include srfi/14, net/url, and many others.

> #lang typed/racket
> (require typed/srfi/14)
> (char-set= (string->char-set "hello")
> (string->char-set "olleh"))

Other libraries can be used with Typed Racket via require/typed.

> #lang typed/racket
> (require/typed version/check
> [check-version (-> (U Symbol (Listof Any)))])
> (check-version)

The following libraries are included with Typed Racket in the typed collection:

(require typed/file) | package: typed-racket-more

(require typed/net/base64) | package: typed-racket-more

(require typed/net/cgi) | package: typed-racket-more

(require typed/net/cookie) | package: typed-racket-more

(require typed/net/dns) | package: typed-racket-more

(require typed/net/ftp) | package: typed-racket-more

(require typed/net/gifwrite) | package: typed-racket-more

(require typed/net/head) | package: typed-racket-more

(require typed/net/imap) | package: typed-racket-more

(require typed/net/mime) | package: typed-racket-more

(require typed/net/nntp) | package: typed-racket-more

(require typed/net/pop3) | package: typed-racket-more

(require typed/net/qp) | package: typed-racket-more

(require typed/net/sendmail) | package: typed-racket-more

(require typed/net/sendurl) | package: typed-racket-more

(require typed/net/smtp) | package: typed-racket-more

(require typed/net/uri-codec)
| package: typed-racket-more

(require typed/net/url) | package: typed-racket-more

(require typed/rackunit) | package: typed-racket-more

(require typed/srfi/14) | package: typed-racket-more

Other libraries included in the main distribution that are either written in Typed Racket or have adapter modules that are typed:

(require math) | package: math-lib

(require plot/typed) | package: plot-gui-lib

#### 3.1`` Porting Untyped Modules to Typed Racket

To adapt a Racket library not included with Typed Racket, the following steps are required:

- Determine the data manipulated by the library, and how it will be represented in Typed Racket.

- Specify that data in Typed Racket, using require/typed and #:opaque and/or #:struct.

- Use the data types to import the various functions and constants of the library.

- Provide all the relevant identifiers from the new adapter module.

For example, the following module adapts the untyped racket/bool library:

> #lang typed/racket
> (require/typed racket/bool
> [true Boolean]
> [false Boolean]
> [symbol=? (Symbol Symbol -> Boolean)]
> [boolean=? (Boolean Boolean -> Boolean)]
> [false? (Any -> Boolean)])
> (provide true false symbol=? boolean=? false?)

More substantial examples are available in the typed collection.

top ← prev up next →