deriving problem

Simon Peyton-Jones simonpj at microsoft.com
Mon Mar 10 03:58:54 EST 2003


The deriving clause is trying to come up with an instance declaration
that looks like

	instance ??? => Show (S r) where ....

What should the "???" be?  Well, to show an S we have to show an (r
String) and a (r Int), so they plainly need to be in class Show.  But
instance declarations must have only type variables in their context
(lest we stray into undecidability).    So this is not legal Haskell 98
	instance (Show (r Int), Show (r String)) => Show (S r ) where...
Hence the message.

I'm not sure what Hugs is doing.  Maybe it just generates the above
instance declaration and hopes for the best.

The instances you give aren't legal H98 either, of course.

Simon

| -----Original Message-----
| From: Dean Herington [mailto:heringto at cs.unc.edu]
| Sent: 08 March 2003 19:09
| To: glasgow-haskell-bugs at haskell.org
| Subject: deriving problem
| 
| The attached program works under hugs -98 but fails with GHC 5.04.2
| with:
| 
| --------
| Params2b.hs:6:
|     No instance for `Show (r String)'
|     When deriving the `Show' instance for type `S'
| 
| Params2b.hs:6:
|     No instance for `Show (r Int)'
|     When deriving the `Show' instance for type `S'
| --------
| 
| If the `deriving` clause for `newtype S r` is replaced by the
| commented-out instance declarations, both systems are happy.
| 
| Did I just get lucky with Hugs, or is GHC in error?
| 
| -- Dean
| 
| --------
| 
| {-# OPTIONS -fglasgow-exts #-}
| 
| class ByField s where
|   byField :: (forall a. r1 a -> r2 a) -> s r1 -> s r2
| 
| newtype S r = S (r Int, r String)
|   deriving Show
| {-
| instance Show (S Id) where
|   show (S s) = "S " ++ show s
| instance Show (S []) where
|   show (S s) = "S " ++ show s
| -}
| 
| instance ByField S where
|   byField f (S (i,s)) = S (f i,f s)
| 
| newtype Id a = Id a
|   deriving Show
| 
| twice :: S Id -> S []
| twice = byField (\(Id x) -> [x,x])
| 
| main = do print s; print (twice s)
|  where s = S (Id 3, Id "abc")
| 
| 
| _______________________________________________
| Glasgow-haskell-bugs mailing list
| Glasgow-haskell-bugs at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs



More information about the Glasgow-haskell-bugs mailing list