Hi all. <br>It&#39;s about a month I&#39;m trying to learn haskell in my spare time ( and, I should add, with my spare neuron :-). <br>I made progress, but more slowly than I expected :-(. I started hasking question on comp.lang.haskell<br>
(I like newsgroups more than mailing lists), but then realized that this may be a better places for my newbie <br>questions. So, here comes the first ...<br>&nbsp;<br>As many&nbsp; beginners coming from OOP, i made the mental equation &#39;type class == interface&#39;.<br>
It worked well ... unitil yesterday.<br>&nbsp;<br>Then I discovered that this piece of code&nbsp; (1) is illegal in askell (ghc gives the &#39;rigid type variable&#39; error)<br>&nbsp;<br>Num n =&gt; a :: n<br>a = 3 :: Integer<br>&nbsp;<br>I also discovered that this (2) instead is legal:<br>
&nbsp;<br>Num n =&gt; a :: n<br>a = 3 <br>&nbsp;<br>because it is implicitely translated into (3):<br>&nbsp;<br>Num n =&gt; a :: n<br>a = fromInteger 3 <br>&nbsp;<br>But I don&#39;t understand the difference between (1) and (3).&nbsp; I could not find the implementation of<br>
fromInteger, but I suspect that it goes like this:<br>&nbsp;<br>instance Num Integer where<br>&nbsp;&nbsp;&nbsp; fromInteger x -&gt; x<br>&nbsp;&nbsp; <br>&nbsp;<br>To me, it looks like (1) and (3) are equal, but that the compiler needs a sort of &#39;formal reassurance&#39; that<br>
the value yielded by &#39;a&#39; is of Num type. But since Integer is an instance of Num, I expected that<br>(1) was already giving this reassurance. At least, it works this way with interfaces in Java and with class pointers in C++.<br>
&nbsp;<br>But obviously there is something I don&#39;t get here ...<br>&nbsp;<br>Anybody here can explain?<br>&nbsp;<br>Ciao<br>-----<br>FB<br>&nbsp;<br>&nbsp;