Yes but as I understood it the type inferer was taking your type annotation for granted, and apparently in fact it re-specifies it.<br>What you said was in reality:<br>&gt; f :: forall. a -&gt; a<br>
&gt; f x = undefined :: forall a1. a1<br>And it turned it into:<br>f :: forall. a -&gt; a<br>f x = undefined :: a<br>(here, &#39;a&#39; would be <b>scoped</b>)<br><br>There&#39;s something I don&#39;t get...<br><br><div class="gmail_quote">

2012/1/4 Yucheng Zhang <span dir="ltr">&lt;<a href="mailto:yczhang89@gmail.com">yczhang89@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="im">On Wed, Jan 4, 2012 at 9:41 PM, Yves Parès &lt;<a href="mailto:limestrael@gmail.com">limestrael@gmail.com</a>&gt; wrote:<br>
&gt; Would you try:<br>
&gt;<br>
&gt; f :: a -&gt; a<br>
&gt; f x = undefined :: a<br>
&gt;<br>
&gt; And tell me if it works? IMO it doesn&#39;t.<br>
<br>
</div>It works.<br>
<br>
As I understand, in this situation we are specializing the &#39;undefined<br>
:: forall a. a&#39;<br>
to a more specific dependent type.<br>
</blockquote></div><br>