
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