
2010/10/3, Isaac Dupree
On 10/03/10 14:39, Klaus Gy wrote:
Thank You very much for the fast replies! I think I expressed myself badly in the first question. What does not work is the following:
class Test a
instance Num a => Test a
For a reason that seems pretty odd until you get used to it. In the instance, "Test a", or the "a" thereof, is called the "instance head". "Num a" is called the "context". When the compiler looks for an instance, it works by looking just at the "instance head": and "a" refers to all types. "instance Num a => Test a" says that the one and only instance that the class has is the one described in that instance. (And it only works when "a" is a Num type; for other attempted uses you'd get a compile error.) For various reasons, such instances aren't allowed by default.
Note that instance Num a => Test [a] might also mean something different than you intended, even though it's allowed: it defines the one and only instance of Test on lists.
-Isaac
Thanks! I could have avoided this question because I've just found out that the details of instance declarations are all described in the Haskell 98 report along with other restrictions I was not aware of. So, can I assume that there is no need in praxis to declare all instances of an existing class to instances of a new class? fweth