Hi, <br><br>I wonder why the following code doesn&#39;t typecheck in GHC 7.4.1:<br><br><div><pre style="text-align:left;margin-bottom:0px;margin-top:0px"><span style="font-size:13px;color:rgb(85,85,85)">{-# LANGUAGE GADTs,RankNTypes #-}</span><font size="3">
</font><span style="font-size:13px;color:rgb(57,116,96)">data</span><font size="3"> </font><span style="font-size:13px;color:rgb(79,67,113)">T</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">a</span><font size="3"> </font><span style="font-size:13px;color:rgb(57,116,96)">where</span><font size="3"> </font><span style="font-size:13px;color:rgb(79,67,113)">T1</span><font size="3"> </font><span style="font-size:13px">::</span><font size="3"> </font><span style="font-size:13px">(</span><span style="font-size:13px;color:rgb(57,116,96)">forall</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">b</span><span style="font-size:13px;color:rgb(51,51,51)">.</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">b</span><font size="3"> </font><span style="font-size:13px">-&gt;</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">b</span><span style="font-size:13px">)</span><font size="3"> </font><span style="font-size:13px">-&gt;</span><font size="3"> </font><span style="font-size:13px">(</span><span style="font-size:13px;color:rgb(57,116,96)">forall</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">a</span><span style="font-size:13px;color:rgb(51,51,51)">.</span><font size="3"> </font><span style="font-size:13px;color:rgb(79,67,113)">Int</span><font size="3"> </font><span style="font-size:13px">-&gt;</span><font size="3"> </font><span style="font-size:13px;color:rgb(79,67,113)">T</span><font size="3"> </font><span style="font-size:13px;color:rgb(51,51,51)">a</span><span style="font-size:13px">)</span><font size="3">

</font><font color="#555555" style="font-size:13px">{- Error:
Data constructor `T1&#39; returns type `forall a. Int -&gt; T a&#39;
      instead of an instance of its parent type `T a&#39;
    In the definition of data constructor `T1&#39;
    In the data type declaration for `T&#39;
Failed, modules loaded: none. -}

</font><font size="3">While:

</font><pre style="margin-top:0px;margin-bottom:0px;font-size:13px;background-color:rgb(255,255,255)"><span class="hs-comment" style="color:rgb(85,85,85)">{-# LANGUAGE GADTs,RankNTypes #-}</span>

<span class="hs-definition">f</span> <span class="hs-keyglyph">::</span> <span class="hs-layout">(</span><span class="hs-keyword" style="color:rgb(57,116,96)">forall</span> <span class="hs-varid" style="color:rgb(51,51,51)">b</span><span class="hs-varop" style="color:rgb(51,51,51)">.</span> <span class="hs-varid" style="color:rgb(51,51,51)">b</span> <span class="hs-keyglyph">-&gt;</span> <span class="hs-varid" style="color:rgb(51,51,51)">b</span><span class="hs-layout">)</span> <span class="hs-keyglyph">-&gt;</span> <span class="hs-layout">(</span><span class="hs-keyword" style="color:rgb(57,116,96)">forall</span> <span class="hs-varid" style="color:rgb(51,51,51)">a</span><span class="hs-varop" style="color:rgb(51,51,51)">.</span> <span class="hs-conid" style="color:rgb(79,67,113)">Int</span> <span class="hs-keyglyph">-&gt;</span> <span class="hs-conid" style="color:rgb(79,67,113)">Maybe</span> <span class="hs-varid" style="color:rgb(51,51,51)">a</span><span class="hs-layout">)</span>
<span class="hs-definition">f</span> <span class="hs-keyglyph">=</span> <span class="hs-varid" style="color:rgb(51,51,51)">undefined</span>

<span class="hs-comment" style="color:rgb(85,85,85)">{- 
ghci&gt; :t f
f :: (forall b. b -&gt; b) -&gt; Int -&gt; Maybe a
-}</span> </pre><pre style="margin-top:0px;margin-bottom:0px;font-size:13px;background-color:rgb(255,255,255)"><br></pre><pre style="margin-top:0px;margin-bottom:0px;font-size:13px;background-color:rgb(255,255,255)">Thanks, 
 Shayan</pre></pre></div>