[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