dominic.j.steinitz@britishairways.com wrote:
I've already declared Gaussian a as being of class Eq so why does it need to be told again?
data Integral a => Gaussian a = Gaussian a a deriving (Eq, Show)
instance Num (Gaussian a) where Gaussian a b - Gaussian a' b' = Gaussian (a-a') (b-b') Gaussian a b + Gaussian a' b' = Gaussian (a+a') (b+b') Gaussian a b * Gaussian a' b' = Gaussian (a*a' - b*b') (a*b' + b*a') negate (Gaussian a b) = Gaussian (negate a) (negate b) fromInteger a = Gaussian (fromIntegral a) 0
You have only declared Gaussian a as being of class Eq (by deriving) if "a" is of class Integral (as a context in the data declaration). Adding Integral a to your instance should fix the problem: instance Integral a => Num (Gaussian a) where Gaussian a b - Gaussian a' b' = Gaussian (a-a') (b-b') Gaussian a b + Gaussian a' b' = Gaussian (a+a') (b+b') Gaussian a b * Gaussian a' b' = Gaussian (a*a' - b*b') (a*b' + b*a') negate (Gaussian a b) = Gaussian (negate a) (negate b) fromInteger a = Gaussian (fromIntegral a) 0 -- Janis Voigtlaender http://wwwtcs.inf.tu-dresden.de/~voigt/ mailto:voigt@tcs.inf.tu-dresden.de