[racket] TR: scope of universally quantified type variables is ... very strange?

From: Sam Tobin-Hochstadt (samth at ccs.neu.edu)
Date: Sat Jan 7 01:14:27 EST 2012

On Jan 7, 2012 2:24 AM, "John Clements" <clements at brinckerhoff.org> wrote:
>
>
> On Jan 5, 2012, at 5:32 PM, Sam Tobin-Hochstadt wrote:
>
> > On Thu, Jan 5, 2012 at 11:56 PM, John Clements
> > <clements at brinckerhoff.org> wrote:
> >> I wrote a piece of code like this without thinking:
> >>
> >> #lang typed/racket
> >>
> >> (: f (All (T) (Number -> T -> T)))
> >> (define ((f x) y)
> >>  (ann y T))
> >>
> >> ... and then, after a second, was sort of flabbergasted that it
worked.  What's the scope of the type variable T? Apparently I can use it
anywhere in the definition of the identifier that it names? That seems
really fragile. Am I misunderstanding this?
> >
> > You're correct about the scope, and the fact that you wrote it without
> > thinking, and it just did the right thing, is precisely what I was
> > going for.  What's fragile here?
>
> Okay, yes, it makes sense.  The scope is not defined by a pair of
parentheses, but I guess I can get past that; after all, our internal
defines are headed in that direction, too.

I would say that the scope is defined by a *different* pair of parentheses .

Sam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120107/8cba2d31/attachment.html>

Posted on the users mailing list.