
Am Donnerstag, 19. Mai 2005 10:39 schrieb Stefan Holdermans:
Wukaichen,
data People = A | B | C | D | E | F deriving (Show, Eq, Ord, Enum) data Pair a = Pair a a deriving Eq
instance Show (Pair People) where show (Pair x y) = "<" ++ show x ++ ", " ++ show y ++ ">"
GHC is right, actually. Haskell 98 requires instance declarations to have the form
instance (...) => C (T a1 ... an)
where a1 are type variables, not type constructors as in your example.
However, you can use the Glasgow extensions to get rid of this restrictions. For example by adding
{-# OPTIONS -fglasgow-exts#-}
to the top of your file.
HTH,
Stefan
Alternatively, one might define instance Show a => Show (Pair a) where ... By the way, the original code also needs the '-98' option for hugs, so the behaviour isn't really different. Cheers, Daniel