[-cafe left out] On Tue, 2008-12-30 at 17:12 +0000, raeck@msn.com wrote:
Hi, how can I make the following code work? (show all the possible values of a type 'a')
showAll :: (Eq a, Bounded a, Enum a) => a -> [a] showAll a = [minBound..maxBound]::[a]
it keeps saying that I could fix the problem by adding (Enum a) and (Bounded a) the the context, but I failed when I try.
The problem is the inner annotation, ::[a]. It's not the same a as in (Eq a, Bounded a, Enum a) => a -> [a], and in Haskell98 it can't be. I'm not surprised that's confused you! If you remove the inner annotation it should work fine though. You can go a step further and make showAll a value rather than a function: showAll = [minBound..maxBound] (I've left out the type annotations, but you can put ":t [minBound..maxBound]" into ghci or hugs if you want one) -- Philippa Cowderoy <flippa@flippac.org> I left the snappy .sigs on the other computer