typed-racket/typed-racket-test/succeed/define-new-subtype.rkt
2015-07-30 23:24:17 -04:00

46 lines
1.2 KiB
Racket

#lang typed/racket/base
(provide Radians Degrees radians degrees
sin cos tan asin acos atan
degrees->radians radians->degrees
)
(require (prefix-in rkt: (combine-in typed/racket/base racket/math)))
(define-new-subtype Radians (radians Real))
(define-new-subtype Degrees (degrees Real))
(: sin : Radians -> Real)
(: cos : Radians -> Real)
(: tan : Radians -> Real)
(define (sin x) (rkt:sin x))
(define (cos x) (rkt:sin x))
(define (tan x) (rkt:tan x))
(: asin : Real -> Radians)
(: acos : Real -> Radians)
(: atan : Real -> Radians)
(define (asin x) (radians (rkt:asin x)))
(define (acos x) (radians (rkt:acos x)))
(define (atan x) (radians (rkt:atan x)))
(: degrees->radians : Degrees -> Radians)
(: radians->degrees : Radians -> Degrees)
(define (degrees->radians x)
(radians (rkt:degrees->radians x)))
(define (radians->degrees x)
(degrees (rkt:radians->degrees x)))
(define-type Listof-Radians (Listof Radians))
(: map-sin : Listof-Radians -> (Listof Real))
(define (map-sin angles)
(map sin angles))
(: map-deg->rad : (Listof Degrees) -> (Listof Radians))
(define (map-deg->rad angles)
(map degrees->radians angles))
(void
(sin (asin 1/2))
)