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 <stuart.hungerf...@gmail.com> 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 racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.