
On Thursday 30 September 2010 21:08:01, Ken Overton wrote:
Hello fellow beginners (and the rest of you, too), I was reading http://en.wikibooks.org/wiki/Haskell/GADT and I really liked the simple eval example. But I reached the end and was confused by the following definition of a heterogenous list:
data TG2 where MkTG2 :: Show b => [b] -> TG2
I had thought a heterogeneous list was something like
[ 5 , 'Z', 3.14, False ]
How can the TG2 definition support the list I've given above?
It can't.
Or am I just wrong about what a heterogeneous list is?
I rather think the wikibook author expressed (her|him)self incorrectly. What TG2 does is wrap a list of (henceforth) unknown type (as long as the type has a Show instance, and that Show instance is made available by pattern matching). To achieve something like your example, you'd need data TG3 where MkTG3 :: Show a => a -> TG3 xs :: [TG3] xs = [MkTG3 5, MkTG3 'Z', MkTG3 3.14, MkTG3 False]
Thanks,
-- kov