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