Hi,
 
I am a newbie, so I might be making nonsense.
 
In the following definiton:
 
class Eq a where
    (==) :: a -> a -> Bool
 
Why do we conlude that both of the "a" refer to the same type? Apparently using different types that both belonging to class Eq results in an error. For example
 
65 == 'a'
 
It doesn't make much sense at first, however, how do you go by implementing multiple polymorphism?
 
Secondly, why does Haskell distinguish between a Type and a Class? There seems to be no benefit of such approach.
 
Thirdly, is it possible to define meta-classes in Haskell?
 
Thanks