#lang scribble/doc @(require scribble/manual scribble/eval planet/util (planet cce/scheme:7/scribble) (for-label typed-scheme) (for-label (this-package-in util)) (for-label (this-package-in 2htdp/image)) (for-label (this-package-in 2htdp/universe))) @(define the-eval (let ([the-eval (make-base-eval)]) (the-eval `(require typed/scheme)) (the-eval `(require (planet ,(this-package-version-symbol util)))) #;(the-eval '(error-print-width 180)) the-eval)) @title{@bold{Typed}: Libraries and Utilities} @author+email["David Van Horn" "dvanhorn@ccs.neu.edu"] This package contains a set of typed libraries. It is still under development. @link[(format "http://planet.plt-scheme.org/trac/newticket?component=~a%2F~a&planetversion=(~a+~a)" (this-package-version-owner) (this-package-version-name) (this-package-version-maj) (this-package-version-min))]{Report a bug}. @section{util} @defmodule/this-package[util] @defthing[cast (All (T) ((Any -> Boolean : T) Any -> T))]{Cast the given value to the type described by the predicate. Note the predicate must be symmetric. The cast will fail at run-time if the value does not satisfy the predicate. Casting is useful to embed type refinements the programmer can prove that Typed Scheme is not able to reason about. @examples[#:eval the-eval (sin pi) (cast real? (sin pi))] } @deftogether[( @defthing[exact-round (Real -> Integer)] @defthing[exact-floor (Real -> Integer)] @defthing[exact-ceiling (Real -> Integer)] @defthing[exact-truncate (Real -> Integer)])]{ These operations coerce their result to exact integers. @examples[#:eval the-eval (round 3/2) (exact-round 3/2) (round 2.5) (exact-round 2.5)] It is a contract violation to apply these operations to a non-rational real (i.e., @scheme[+inf.0], @scheme[-inf.0], or @scheme[+nan.0]), since there is no exact representation of these values. @examples[#:eval the-eval (round +inf.0) (exact-round +inf.0)] } @section{2htdp/image} @defmodule/this-package[2htdp/image] This module provides a typed 2htdp/image library. @deftogether[( @defidform[Image] @defidform[Nat] @defidform[Angle] @defidform[Color] @defidform[Image-Color] @defidform[Mode] @defidform[X-Place] @defidform[Y-Place] @defidform[Pen] @defidform[Pen-Style] @defidform[Pen-Cap] @defidform[Pen-Join] )]{Base types. @scheme[Angle] is a synonym for @scheme[Real] and @scheme[Nat] for @scheme[Exact-Nonnegative-Integer].} @deftogether[( @defthing[circle (Real Mode (U Pen Image-Color) -> Image)] @defthing[ellipse (Real Real Mode (U Pen Image-Color) -> Image)] @defthing[triangle (Real Mode (U Pen Image-Color) -> Image)] @defthing[right-triangle (Real Real Mode (U Pen Image-Color) -> Image)] @defthing[isosceles-triangle (Real Angle Mode (U Pen Image-Color) -> Image)] @defthing[square (Real Mode (U Pen Image-Color) -> Image)] @defthing[rectangle (Real Real Mode (U Pen Image-Color) -> Image)] @defthing[rhombus (Real Angle Mode (U Pen Image-Color) -> Image)] @defthing[regular-polygon (Real Nat Mode (U Pen Image-Color) -> Image)] @defthing[star (Real Mode (U Pen Image-Color) -> Image)] @defthing[star-polygon (Real Nat Nat Mode (U Pen Image-Color) -> Image)] @defthing[polygon ([Listof Posn] Mode (U Pen Image-Color) -> Image)] @defthing[line (Real Real Image-Color -> Image)] @defthing[add-line (Image Real Real Real Real (U Pen Image-Color) -> Image)] @defthing[add-curve (Image Real Real Angle Real Real Real Angle Real (U Pen Image-Color) -> Image)] @defthing[text (String Integer Image-Color -> Image)] @defthing[text/font (String Exact-Positive-Integer Image-Color (Option String) (U 'default 'decorative 'roman 'script 'swiss 'modern 'symbol 'system) (U 'normal 'italic 'slant) (U 'normal 'bold 'light) Any -> Image)] @defthing[overlay (Image Image Image * -> Image)] @defthing[overlay/align (X-Place Y-Place Image Image Image * -> Image)] @defthing[overlay/xy (Image Real Real Image -> Image)] @defthing[underlay (Image Image Image * -> Image)] @defthing[underlay/align (X-Place Y-Place Image Image Image * -> Image)] @defthing[underlay/xy (Image Real Real Image -> Image)] @defthing[beside (Image Image Image * -> Image)] @defthing[beside/align (Y-Place Image Image Image * -> Image)] @defthing[above (Image Image Image * -> Image)] @defthing[above/align (X-Place Image Image Image * -> Image)] @defthing[empty-scene (Real Real -> Image)] @defthing[place-image (Image Real Real Image -> Image)] @defthing[place-image/align (Image Real Real X-Place Y-Place Image -> Image)] @defthing[scene+line (Image Real Real Real Real (U Pen Image-Color) -> Image)] @defthing[scene+curve (Image Real Real Angle Real Real Real Angle Real (U Pen Image-Color) -> Image)] @defthing[rotate (Angle Image -> Image)] @defthing[scale (Real Image -> Image)] @defthing[scale/xy (Real Real Image -> Image)] @defthing[crop (Real Real Real Real Image -> Image)] @defthing[frame (Image -> Image)] @defthing[image-width (Image -> Nat)] @defthing[image-height (Image -> Nat)] @defthing[image-baseline (Image -> Nat)] @defthing[mode? (Any -> Boolean)] @defthing[image-color? (Any -> Boolean)] @defthing[make-color (Nat Nat Nat -> Color)] @defthing[color-red (Color -> Nat)] @defthing[color-green (Color -> Nat)] @defthing[color-blue (Color -> Nat)] @defthing[y-place? (Any -> Boolean)] @defthing[x-place? (Any -> Boolean)] @defthing[angle? (Any -> Boolean)] @defthing[side-count? (Any -> Boolean)] @defthing[make-pen (Image-Color Real Pen-Style Pen-Cap Pen-Join -> Pen)] @defthing[pen-color (Pen -> Image-Color)] @defthing[pen-width (Pen -> Real)] @defthing[pen-style (Pen -> Pen-Style)] @defthing[pen-cap (Pen -> Pen-Cap)] @defthing[pen-join (Pen -> Pen-Join)] @defthing[pen-style? (Any -> Boolean)] @defthing[pen-cap? (Any -> Boolean)] @defthing[pen-join? (Any -> Boolean)])]{Typed variants of the image library.} @section{2htdp/universe} @defmodule/this-package[2htdp/universe] @defthing[animate ((Nat -> Image) -> Nat)]{ Typed animate.}