On this page:
:  type
:  print-type
:  query-type/  args
:  query-type/  result
6.0.1

6 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 Nonpositive-Real Nonnegative-Real)

[can expand further: Nonpositive-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. 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))