Also, this way lies a bit of madness, since fromEnum/toEnum work on Int, not Integer.
This means EnumPair (EnumPair Month Month) (EnumPair Month Month) overflows -- ryan On Tue, May 25, 2010 at 11:30 AM, Henning Thielemann <[email protected]> wrote: > Daniel Fischer schrieb: >> On Sunday 23 May 2010 15:33:58, Ivan Lazar Miljenovic wrote: >>> R J <[email protected]> writes: >>>> 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'". >>> You can't derive instances for type aliases (as its mainly there for >>> documentation reasons, etc.). However, pairs don't have Enum instances >>> by default so you still can't use its instance. >>> >>> If you define "data MonthPair = MonthPair Month Month" then you should >>> be able to derive Enum. >> >> No, per the report (http://haskell.org/onlinereport/derived.html) >> >> "Derived instance declarations for the class Enum are only possible for >> enumerations (data types with only nullary constructors)." > > You might define an instance more generally: > > data EnumPair a b = EnumPair a b > > instance (Enum a, Bounded b, Enum b) => Enum (EnumPair a b) where > ... > > Then define something like > fromEnum (EnumPair a b) = (maxBound - minBound)*a + b > > (needs still some asTypeOf's and fromEnum's) > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
