<p><br>
On Jan 7, 2012 2:24 AM, "John Clements" <<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>> wrote:<br>
><br>
><br>
> On Jan 5, 2012, at 5:32 PM, Sam Tobin-Hochstadt wrote:<br>
><br>
> > On Thu, Jan 5, 2012 at 11:56 PM, John Clements<br>
> > <<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>> wrote:<br>
> >> I wrote a piece of code like this without thinking:<br>
> >><br>
> >> #lang typed/racket<br>
> >><br>
> >> (: f (All (T) (Number -> T -> T)))<br>
> >> (define ((f x) y)<br>
> >> (ann y T))<br>
> >><br>
> >> ... 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?<br>
> ><br>
> > You're correct about the scope, and the fact that you wrote it without<br>
> > thinking, and it just did the right thing, is precisely what I was<br>
> > going for. What's fragile here?<br>
><br>
> 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.</p>
<p>I would say that the scope is defined by a *different* pair of parentheses .</p>
<p>Sam<br>
</p>