[Haskell] GADTs are not nice to me ;-)

Chris Kuklewicz haskell at list.mightyreason.com
Mon Jul 3 10:49:33 EDT 2006


Wolfgang Jeltsch wrote:
> Hello everybody,
> 
> I wanted to do something like that:
> 
> 	data Pair :: (* -> *) -> * where
> 	    Pair :: a b -> b -> Pair a
> 
> 	data Sel :: * -> * where
> 	    A :: Sel Bool
> 	    B :: Sel Integer
> 
> 	showSnd :: Pair Sel -> String
> 	showSnd (Pair A bool)
> 	    = show bool
> 	showSnd (Pair B integer)
> 	    = show integer
> 
> However, GHC 6.4.1 with -fglasgow-exts complains in the second last and last 
> line that there is no instance for (Show b).  I don't really understand this 
> since in my opinion it is clear that bool :: Bool and integer :: Integer and 
> that therefore bool and integer are showable.  What's the problem with my 
> code?
> 
> Best wishes,
> Wolfgang

I cut and pasted your code into ghci-6.4.2 with -fglasgow-exts and there was no 
error.  And I can (print (showSnd (Pair A True)) and (print (showSnd (Pair B 
8))) but when I try to compile it with ghc-6.4.2 it complains about the Show 
instance.  I find this deeply wierd, and it seems like a bug.

Changing the definition of Pair made it compile and run with ghc:

 > data Pair :: (* -> *) -> * where
 >   Pair :: (Show b) => a b -> b -> Pair a

-- 
Chris


More information about the Haskell mailing list