[racket-dev] A very listy Typed Racket Integer

From: Sam Tobin-Hochstadt (samth at ccs.neu.edu)
Date: Thu Jul 5 20:54:42 EDT 2012

On Jul 5, 2012 8:50 PM, "Neil Toronto" <neil.toronto at gmail.com> wrote:
>
> I just found this today:
>
>
> #lang typed/racket
>
> (define: b : (Boxof Any) (box 4))
>
> (define-predicate boxof-integer? (Boxof Integer))

This is the bug -- there's no way to write the boxof-integer? predicate,
and define- predicate shouldn't think it can.

> (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.

A bug.  Anytime you get a result like that it's a bug.

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

No, that relationship would be unsound for similar reasons.

> Neil ⊥
> _________________________
>  Racket Developers list:
>  http://lists.racket-lang.org/dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20120705/56a054f0/attachment.html>

Posted on the dev mailing list.