<p><br>
On Jan 7, 2012 2:24 AM, &quot;John Clements&quot; &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Jan 5, 2012, at 5:32 PM, Sam Tobin-Hochstadt wrote:<br>
&gt;<br>
&gt; &gt; On Thu, Jan 5, 2012 at 11:56 PM, John Clements<br>
&gt; &gt; &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt; wrote:<br>
&gt; &gt;&gt; I wrote a piece of code like this without thinking:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; #lang typed/racket<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; (: f (All (T) (Number -&gt; T -&gt; T)))<br>
&gt; &gt;&gt; (define ((f x) y)<br>
&gt; &gt;&gt;  (ann y T))<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; ... and then, after a second, was sort of flabbergasted that it worked.  What&#39;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>

&gt; &gt;<br>
&gt; &gt; You&#39;re correct about the scope, and the fact that you wrote it without<br>
&gt; &gt; thinking, and it just did the right thing, is precisely what I was<br>
&gt; &gt; going for.  What&#39;s fragile here?<br>
&gt;<br>
&gt; 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>