Also opaque types might help you:
http://docs.racket-lang.org/ts-reference/special-forms.html#%28form._%28%28lib._typed-racket%2Fbase-env%2Fprims..rkt%29._require%2Ftyped%29%29
http://docs.racket-lang.org/ts-reference/type-ref.html#%28form._%28%28lib._typed-racket%2Fbase-env%2Fbase-types-extra..rkt%29._.Opaque%29%29

If you wanted sub-typing too, then refinement types would help, except I don’t 
think they work yet.

An example of using them for radians and degrees:

untyped-radians-degrees.rkt:
#lang racket/base
(provide radians? real->radians radians->real
         degrees? real->degrees degrees->real
         radians->degrees degrees->radians)
(require racket/math)
(define (radians? v) (real? v))
(define (real->radians x) x)
(define (radians->real x) x)
(define (degrees? v) (real? v))
(define (real->degrees x) x)
(define (degrees->real x) x)

typed-radians-degrees.rkt:
#lang typed/racket/base
(require/typed/provide "untyped-radians.rkt"
                       [#:opaque Radians radians?]
                       [real->radians [Real -> Radians]]
                       [radians->real [Radians -> Real]]
                       [#:opaque Degrees degrees?]
                       [real->degrees [Real -> Degrees]]
                       [degrees->real [Degrees -> Real]]
                       [radians->degrees [Radians -> Degrees]]
                       [degrees->radians [Degrees -> Radians]])

try-radians-degrees.rkt:
#lang typed/racket/base
(require "typed-radians-degrees.rkt")
(: d-90 : Degrees)
(define d-90 (real->degrees 90.0))
; type mismatch!
(: r-PI : Radians)
(define r-PI (real->degrees 180.0))


On May 23, 2015, at 11:34 PM, Stuart Hungerford <[email protected]> 
wrote:

> On Sunday, 24 May 2015 12:50:48 UTC+10, Matthias Felleisen  wrote:
> 
>> Stuart, would a predicated refinement type work for you: 
>> 
>> -- 
>> http://docs.racket-lang.org/ts-reference/special-forms.html?q=define-predicate#%28form._%28%28lib._typed-racket%2Fbase-env%2Fprims..rkt%29._make-predicate%29%29
> 
> Looking into that now--many thanks.
> 
> Stu  
> 
> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to