[racket] Help regarding typed racket and opaque types

From: Antonio Menezes Leitao (antonio.menezes.leitao at ist.utl.pt)
Date: Thu Jul 17 19:07:47 EDT 2014

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?

António Leitão.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140718/f19067af/attachment.html>

Posted on the users mailing list.