On Jul 17, 2014, at 7:07 PM, Antonio Menezes Leitao <antonio.menezes.lei...@ist.utl.pt> wrote:
> Hi, > > The following program typechecks: > > #lang typed/racket > > (define-type R Real) > (define-type Rs (Listof R)) > (define-type ROrRs (U R Rs)) > > (define (test [x : ROrRs]) : R > (if (list? x) > (if (null? x) > (error "Less than one") > (if (null? (cdr x)) > (car x) > (error "More than one"))) > x)) > > However, if we define R as an opaque type, e.g., using > > (require/typed racket [#:opaque MyReal real?]) > (define-type R MyReal) > > then the program does not typecheck. > > I was expecting that the program should typecheck independently of the actual > type being used for R. What am I missing? This doesn’t type check because as far as the type checker knows R could include a list type. > > António Leitão. > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users