
(BCC'ing the GHC bugs list) It seems like there's something very funky going on with GHC (6.4) and automatically deriving instances. Consider this code: ---8<-------------------------------------- 1: class MyClass a 2: 3:instance MyClass a => Show a 4: 5:newtype Type1 = Type1 { unType1 :: Int } deriving (Show) 6: 7:main = putStrLn $ show $ Type1 4 ---8<-------------------------------------- If you try to compile this, you get: ---8<-------------------------------------- Overlapping instances for Show Int arising from the 'deriving' clause of a data type declaration at Test.hs:5:8 Matching instances: Test.hs:3:0: instance (MyClass a) => Show a Imported from GHC.Show: instance Show Int When deriving the `Show' instance for type `Type1' ---8<-------------------------------------- Weird error. I haven't even declared an instance of MyClass! If I change line 5 to "deriving (MyClass), I get: *** Exception: stack overflow Sounds like a compiler bug to me. If I comment out line 3 and leave "deriving (Show)", it all works as expected. So... what's exactly the purpose of omitting the where-part of an instance declaration? It is supported, and it is even shown in code in the Haskell 98 report, but I failed to find any place in the whole document where it was described. Same thing for GHC's documentation. My purpose here was to do group classes for deriving like so: ---8<-------------------------------------- class MyNum a instance MyNum a => Eq a instance MyNum a => Ord a instance MyNum a => Show a instance MyNum a => Enum a instance MyNum a => Num a instance MyNum a => Real a instance MyNum a => Integral a instance MyNum a => Bits a instance MyNum a => Storable a -- Too long?... newtype ID = ID { unID :: WORD } deriving (Eq, Ord, Show, Enum, Num, Real, Integral, Bits, Storable) newtype ID = ID { unID :: Int } deriving (MyNum) ---8<-------------------------------------- I guess that's not doable? JCAB