<p><a href="http://hackage.haskell.org/trac/ghc/ticket/5287">http://hackage.haskell.org/trac/ghc/ticket/5287</a></p>
<div class="gmail_quote">El 29/06/2011 10:22, &quot;Yitzchak Gale&quot; &lt;<a href="mailto:gale@sefer.org">gale@sefer.org</a>&gt; escribió:<br type="attribution">&gt; Ryan Ingram wrote:<br>&gt;&gt; So this is definitely a GHC bug, but I think the problem is probably<br>
&gt;&gt; triggered by this line:<br>&gt;&gt;<br>&gt;&gt; instance  Serializable a b =&gt; IResource a<br>&gt;&gt;<br>&gt;&gt; I don&#39;t think this is a valid instance declaration without a functional<br>&gt;&gt; dependency on Serializable, as it&#39;s impossible to know which type &#39;b&#39; to use<br>
&gt;&gt; in the methods of IResource.<br>&gt; <br>&gt; That&#39;s not exactly the reason why that line is a problem.<br>&gt; The methods of IResource don&#39;t use b. Presumably, some of<br>&gt; the methods of Serializable don&#39;t mention b either, and those<br>
&gt; could be used in the instance.<br>&gt; <br>&gt; But what exactly does this instance mean? Where does the<br>&gt; implicit &quot;forall b&quot; go? For this to make any sense, it would<br>&gt; need to be:<br>&gt; <br>
&gt; -- Illegal syntax for instance<br>&gt; instance (forall b. Serializable a b =&gt; IResource a)<br>&gt; <br>&gt; I don&#39;t think it has ever been specified whether it is legal<br>&gt; to have free type variables as parameters of a multi-parameter<br>
&gt; class in the superclass context of an instance declaration,<br>&gt; and if so, how to interpret that.<br>&gt; <br>&gt; Haskell 98/2010 does seem to allow it for single-parameter<br>&gt; classes, but there the obvious meaning would be just to<br>
&gt; ignore those parts of the context.<br>&gt; <br>&gt; In any case, GHC does seem to be getting very confused.<br>&gt; Here is a smaller test case. While it does not trigger the<br>&gt; crash, it does cause GHC to give a seemingly nonsensical<br>
&gt; error message:<br>&gt; <br>&gt; module ClassContextBug where<br>&gt; class A a<br>&gt; class B b<br>&gt; instance A a =&gt; B b<br>&gt; <br>&gt; ClassContextBug.hs:5:17:<br>&gt;     Illegal instance declaration for `B b&#39;<br>
&gt;       (All instance types must be of the form (T a1 ... an)<br>&gt;        where a1 ... an are *distinct type variables*,<br>&gt;        and each type variable appears at most once in the instance head.<br>&gt;        Use -XFlexibleInstances if you want to disable this.)<br>
&gt;     In the instance declaration for `B b&#39;<br>&gt; <br>&gt; I believe this is valid Haskell 98, so GHC should accept it.<br>&gt; But even if not, what GHC is claiming in the error message<br>&gt; is simply not true.<br>
&gt; <br>&gt; I would like to add this to the bug report.<br>&gt; Alberto, have you filed the bug report yet? Can you please post a link?<br>&gt; <br>&gt; Thanks,<br>&gt; Yitz<br></div>