2008/12/21 Iavor Diatchki <span dir="ltr">&lt;<a href="mailto:iavor.diatchki@gmail.com">iavor.diatchki@gmail.com</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><div class="Ih2E3d"><br>
g :: TestClass a =&gt; a -&gt; Integer<br>
</div>g = fst (a :: (a -&gt; Integer, a -&gt; Integer))</blockquote><div><br>Which I believe needs to be written:<br><br>g :: forall a. TestClass a =&gt; a -&gt; Integer<br>g = fst (a :: (a -&gt; Integer, a -&gt; Integer))<br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Here we are using another GHC extension called &quot;scoped type variables&quot;<br>
to associate the &quot;a&quot; in the type signature of &quot;g&quot; with the &quot;a&quot; in the<br>
type annotation for the value &quot;a&quot;.<br>
<br>
Hope that this helps,<br>
<font color="#888888">Iavor<br>
</font><div><div></div><div class="Wj3C7c"><br>
<br>
<br>
<br>
On Sun, Dec 21, 2008 at 9:21 AM, Maurí­cio &lt;<a href="mailto:briqueabraque@yahoo.com">briqueabraque@yahoo.com</a>&gt; wrote:<br>
&gt;&gt;&gt; Why isn&#39;t the last line of this code allowed?<br>
&gt;&gt;&gt; f :: (TestClass a) =&gt; a -&gt; Integer<br>
&gt;&gt;&gt; f = const 1<br>
&gt;&gt;&gt; a = (f,f)<br>
&gt;&gt;&gt; g = fst a<br>
&gt;&gt;&gt; The only thing I can think about is monomorphism<br>
&gt;&gt;&gt; restriction, but it&#39;s allowed (...)<br>
&gt;<br>
&gt;&gt; (...) The reason is that a has type<br>
&gt;&gt; a :: (TestClass a, TestClass b) =&gt; (a,b)<br>
&gt;&gt; and then when we take &#39;fst&#39; of this value (as in g) we get<br>
&gt;<br>
&gt;&gt; g :: (TestClass a, TestClass b) =&gt; a<br>
&gt;&gt; which is an ambiguous type, (...)<br>
&gt;<br>
&gt; Is there some version (i.e., set of extensions) of<br>
&gt; Haskell where this would be allowed?<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;<br>
</div></div><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br>