Show a REPL type printing example in the TR guide

Please merge to v6.0.1
(cherry picked from commit 52cc507aa5)
This commit is contained in:
Asumu Takikawa 2014-04-07 21:20:14 -04:00 committed by Ryan Culpepper
parent 74f82bbd1d
commit e70b606142

View File

@ -23,7 +23,7 @@ are provided as well; for example, the
@racketmodname[typed/racket/base] language corresponds to @racketmodname[typed/racket/base] language corresponds to
@racketmodname[racket/base]. @racketmodname[racket/base].
@racketblock[(struct: pt ([x : Real] [y : Real]))] @racketblock+eval[#:eval the-eval (struct: pt ([x : Real] [y : Real]))]
@margin-note{Many forms in Typed Racket have the same name as the @margin-note{Many forms in Typed Racket have the same name as the
untyped forms, with a @racket[:] suffix.} untyped forms, with a @racket[:] suffix.}
@ -36,7 +36,7 @@ form from @racketmodname[racket]---when porting a program from
@racketmodname[racket] to @racketmodname[typed/racket], uses of @racketmodname[racket] to @racketmodname[typed/racket], uses of
@racket[struct] should be changed to @racket[struct:]. @racket[struct] should be changed to @racket[struct:].
@racketblock[(: distance (-> pt pt Real))] @racketblock+eval[#:eval the-eval (: distance (-> pt pt Real))]
This declares that @racket[distance] has the type @racket[(-> pt pt Real)]. This declares that @racket[distance] has the type @racket[(-> pt pt Real)].
@;{@racket[distance] must be defined at the top-level of the module containing @;{@racket[distance] must be defined at the top-level of the module containing
@ -52,7 +52,7 @@ function type, in this case @racket[Real].
If you are familiar with @rtech{contracts}, the notation for function If you are familiar with @rtech{contracts}, the notation for function
types is similar to function contract combinators. types is similar to function contract combinators.
@racketblock[ @racketblock+eval[#:eval the-eval
(define (distance p1 p2) (define (distance p1 p2)
(sqrt (+ (sqr (- (pt-x p2) (pt-x p1))) (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
(sqr (- (pt-y p2) (pt-y p1)))))) (sqr (- (pt-y p2) (pt-y p1))))))
@ -66,6 +66,17 @@ the function has the type @racket[Real], under the assumption that
from the earlier type declaration. Since the body does have this type, from the earlier type declaration. Since the body does have this type,
the program is accepted. the program is accepted.
In the Typed Racket @gtech{REPL}, calling @racket[distance] will
show the result as usual and will also print the result's type:
@interaction[#:eval the-eval (distance (pt 0 0) (pt 3.1415 2.7172))]
Just evaluating the function name will print the function value and its type,
which can be useful for discovering the types that Typed Racket ascribes to
Racket functions. Alternatively, the @racket[:print-type] command will just
print the type:
@interaction[#:eval the-eval distance string-length (:print-type string-ref)]
@section{Datatypes and Unions} @section{Datatypes and Unions}