7 Exploring Types

▼ |  | The Typed Racket Reference

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

On this page:

: type
: print-type
: query-type/ args
: query-type/ result

6.6
top ← prev up next →

### 7`` Exploring Types

In addition to printing a summary of the types of REPL results, Typed Racket provides interactive utilities to explore and query types. The following bindings are only available at the Typed Racket REPL.

> syntax (:type maybe-verbose t)
> maybe-verbose |  | = |  |
> |  | | |  | #:verbose

Prints the type t. If t is a type alias (e.g., Number), then it will be expanded to its representation when printing. Any further type aliases in the type named by t will remain unexpanded.

If #:verbose is provided, all type aliases are expanded in the printed type.

Examples:

> > (:type Number)
> (U Inexact-Complex Exact-Number Real Float-Imaginary Single-Flonum-Imaginary)
> [can expand further: Inexact-Complex Exact-Number Real]
> > (:type Real)
> (U Negative-Real Nonnegative-Real)
> [can expand further: Negative-Real Nonnegative-Real]
> > (:type #:verbose Number)
> (U 0
> 1
> Byte-Larger-Than-One
> Positive-Index-Not-Byte
> Positive-Fixnum-Not-Index
> Negative-Fixnum
> Positive-Integer-Not-Fixnum
> Negative-Integer-Not-Fixnum
> Positive-Rational-Not-Integer
> Negative-Rational-Not-Integer
> Float-Nan
> Float-Positive-Zero
> Float-Negative-Zero
> Positive-Float-No-NaN
> Negative-Float-No-NaN
> Single-Flonum-Nan
> Single-Flonum-Positive-Zero
> Single-Flonum-Negative-Zero
> Positive-Single-Flonum-No-Nan
> Negative-Single-Flonum-No-Nan
> Exact-Imaginary
> Exact-Complex
> Float-Imaginary
> Single-Flonum-Imaginary
> Float-Complex
> Single-Flonum-Complex)

> syntax (:print-type e)

Prints the type of e, which must be an expression. This prints the whole type, which can sometimes be quite large.

Examples:

> > (:print-type (+ 1 2))
> Positive-Index
> > (:print-type map)
> (All (c a b ...)
> (case->
> (-> (-> a c) (Pairof a (Listof a)) (Pairof c (Listof c)))
> (-> (-> a b ... b c) (Listof a) (Listof b) ... b (Listof c))))

> syntax (:query-type/args f t ...)

Given a function f and argument types t, shows the result type of f.

Example:

> > (:query-type/args + Integer Number)
> (-> Integer Number Number)

> syntax (:query-type/result f t)

Given a function f and a desired return type t, shows the arguments types f should be given to return a value of type t.

Examples:

> > (:query-type/result + Integer)
> (-> Integer * Integer)
> > (:query-type/result + Float)
> (case->
> (-> Flonum Flonum * Flonum)
> (-> Real Real Flonum Real * Flonum)
> (-> Real Flonum Real * Flonum)
> (-> Flonum Real Real * Flonum))

top ← prev up next →