Why the instance declaration , passing on Hug but failing on GHC 6.2.1?

Stefan Holdermans sholderm at students.cs.uu.nl
Thu May 19 04:39:54 EDT 2005


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



More information about the Glasgow-haskell-users mailing list