Hi, <br><br>I wonder why the following code doesn'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">-></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">-></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">-></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' returns type `forall a. Int -> T a'
instead of an instance of its parent type `T a'
In the definition of data constructor `T1'
In the data type declaration for `T'
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">-></span> <span class="hs-varid" style="color:rgb(51,51,51)">b</span><span class="hs-layout">)</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)">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">-></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> :t f
f :: (forall b. b -> b) -> Int -> 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>