#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))) (void (sin (asin 1/2)) )