If GHC handles the explicit "forall" in constructor "T1" in the same way as it does for function "f", we have:<br><br><blockquote type="cite"><pre style="text-align:left;margin-bottom:0px;margin-top:0px">
<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;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="color:rgb(51,51,51)"><font size="3">a
</font></span></pre></blockquote><br><div class="gmail_quote">Which is totally fine! The main question is then why the "forall"s are handled differently?<br><br></div><div class="gmail_quote">On Tue, Jul 31, 2012 at 9:07 PM, MigMit <span dir="ltr"><<a href="mailto:miguelimo38@yandex.ru" target="_blank">miguelimo38@yandex.ru</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF"><div>It really seems to me that the error message you've got explains everything quite clear.<br>
<br>Отправлено с iPad</div><div><br>31.07.2012, в 22:59, Shayan Najd Javadipour <<a href="mailto:sh.najd@gmail.com" target="_blank">sh.najd@gmail.com</a>> написал(а):<br><br></div><div><div class="h5"><div></div><blockquote type="cite">
<div>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="font-size:13px;margin-bottom:0px;margin-top:0px"><span style="color:rgb(85,85,85)">{-# LANGUAGE GADTs,RankNTypes #-}</span>
<span>f</span> <span>::</span> <span>(</span><span style="color:rgb(57,116,96)">forall</span> <span style="color:rgb(51,51,51)">b</span><span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">b</span> <span>-></span> <span style="color:rgb(51,51,51)">b</span><span>)</span> <span>-></span> <span>(</span><span style="color:rgb(57,116,96)">forall</span> <span style="color:rgb(51,51,51)">a</span><span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(79,67,113)">Int</span> <span>-></span> <span style="color:rgb(79,67,113)">Maybe</span> <span style="color:rgb(51,51,51)">a</span><span>)</span>
<span>f</span> <span>=</span> <span style="color:rgb(51,51,51)">undefined</span>
<span style="color:rgb(85,85,85)">{-
ghci> :t f
f :: (forall b. b -> b) -> Int -> Maybe a
-}</span> </pre><pre style="font-size:13px;margin-bottom:0px;margin-top:0px"><br></pre><pre style="font-size:13px;margin-bottom:0px;margin-top:0px">Thanks,
Shayan</pre></pre></div>
</div></blockquote></div></div><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Haskell-Cafe mailing list</span><br><span><a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a></span><br>
<span><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></span><br></div></blockquote></div></blockquote></div><br>