[racket] Help regarding typed racket and opaque types

From: Alexander D. Knauth (alexander at knauth.org)
Date: Thu Jul 17 19:17:06 EDT 2014

On Jul 17, 2014, at 7:07 PM, Antonio Menezes Leitao <antonio.menezes.leitao at 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



Posted on the users mailing list.