| one, and the program compiles. Interestingly, -ddump-deriv doesn't
show
| anything about deriving instances for Colour, yet, obviously
something
| gets derived.
For me (ghc 6.4.2) it says:
==================== Derived instances ====================
InstInfo: {GHC.Show.Show Foo4.Colour}
{ GHC.Show.showList = GHC.Show.showList__ (GHC.Show.showsPrec 0)
GHC.Show.showsPrec (_) (Foo4.Red) = GHC.Show.showString "Red"
GHC.Show.showsPrec (_) (Foo4.Black) = GHC.Show.showString "Black"
GHC.Show.showsPrec (_) (Foo4.Blue) = GHC.Show.showString "Blue" }
InstInfo: {GHC.Enum.Bounded Foo4.Colour}
{ GHC.Enum.maxBound = Foo4.Blue
GHC.Enum.minBound = Foo4.Red }
Not very pretty, but definitely not nothing.
| When you run it, it dies with an error message from 'toEnum n' (or
| non-exhaustive pattern if you leave that one out).
That's exactly as specified by the Report. If you look here,
http://haskell.org/onlinereport/standard-prelude.html
and search for class Enum, you'll se
class Enum a where
..[snip]...
-- NOTE: these default methods only make sense for types
-- that map injectively into Int using fromEnum
-- and toEnum.
enumFrom x = map toEnum [fromEnum x ..]
and this is precisely the behaviour you get.
I agree it isn't the behaviour your want. If every Enum was Bounded,
the enumFrom default method could stop at maxBound. But Enum and
Bounded are separate classes.
Simon
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs