Say I've got a type "Month" declared as an instance of the "Enum" class, and a type "MonthPair" declared as a pair of months:

data Month                 =  January
                           |  February
                           |  March
                           |  April
                           |  May
                           |  June
                           |  July
                           |  August
                           |  September
                           |  October
                           |  November
                           |  December
                           deriving (Eq, Enum, Ord, Show)

type MonthPair             =  (Month, Month)
                           deriving (Enum)

The "deriving" on "MonthPair" gives me the error "parse error on input 'deriving'".

Why is this error generated?  Is there a syntax error, or is there a conceptual problem with enumerating a Cartesian product, such as Month x Month?  The cardinality of the Cartesian product is finite (including the bottom values, cardinality = 1 + (12 + 1)*(12 + 1) = 170), and so the product is amenable at least to some arbitrary enumeration (such as Cantor's diagonal method).

Thanks. 




The New Busy think 9 to 5 is a cute idea. Combine multiple calendars with Hotmail. Get busy.