[Haskell-cafe] Declaring a tuple of instances of Enums as an
instance of the Enum class
Daniel Fischer
daniel.is.fischer at web.de
Sun May 23 09:51:45 EDT 2010
On Sunday 23 May 2010 15:33:58, Ivan Lazar Miljenovic wrote:
> R J <rj248842 at hotmail.com> 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 can derive Enum instances for newtype wrappers around Enums with GHC
(possibly others), but for types such as MonthPair you have to give the
instances yourself (maybe you can let them be generated by tools like
Derive).
More information about the Haskell-Cafe
mailing list