I just found this today:

#lang typed/racket

(define: b : (Boxof Any) (box 4))

(define-predicate boxof-integer? (Boxof Integer))

(define (set-b-box! v) (set-box! b v))

(: a-very-listy-integer (-> Integer))
(define (a-very-listy-integer)
  (cond [(boxof-integer? b)  (set-b-box! '(1 2 3))
                             (unbox b)]
        [else  (error 'a-very-listy-integer "can't happen")]))


> (a-very-listy-integer)
- : Integer
'(1 2 3)


Is this a bug or a limitation? It can be replicated with any mutable container type as far as I can tell.

Also, if it's a limitation, can I get (Vectorof Index) to be a subtype of (Vectorof Integer)?

Neil ⊥
_________________________
 Racket Developers list:
 http://lists.racket-lang.org/dev

Reply via email to