|
unexpected arithmetic sequence and deriving Enum behaviour: msg#00138lang.haskell.glasgow.bugs
Hi, Consider the following code fragment: data Colour = Red | Black | Blue deriving (Show, Bounded) instance Enum Colour where succ Red = Black succ Black = Blue succ Blue = error "succ of maxBound" fromEnum Red = 1 fromEnum Black = 2 fromEnum Blue = 3 toEnum 1 = Red toEnum 2 = Black toEnum 3 = Blue toEnum n = error ("? "++show n) main = do print $ [Red ..] Notice that there is no deriving Enum (which would be an error according to the Report) and there is no definition for 'enumFrom'. So, in the first place I'd expect a warning for main for the use of the arithmetic sequence, something about a missing definition. There isn't one, and the program compiles. Interestingly, -ddump-deriv doesn't show anything about deriving instances for Colour, yet, obviously something gets derived. When you run it, it dies with an error message from 'toEnum n' (or non-exhaustive pattern if you leave that one out). Looking at core reveals the reason for this: Main.lvl7 :: GHC.Base.Int -> [Main.Colour] -> [Main.Colour] [GlobalId] [Arity 2] Main.lvl7 = \ (x1 :: GHC.Base.Int) (ys :: [Main.Colour]) -> GHC.Base.: @ Main.Colour (Main.toEnum x1) ys Main.lvl8 :: [Main.Colour] [GlobalId] [] Main.lvl8 = GHC.Enum.eftIntFB @ [Main.Colour] Main.lvl7 (GHC.Base.[] @ Main.Colour) 1 2147483647 Main.lvl9 :: [Main.Colour] [GlobalId] [] Main.lvl9 = GHC.Enum.eftIntFB @ [Main.Colour] Main.lvl7 (GHC.Base.[] @ Main.Colour) 2 2147483647 Main.lvl10 :: [Main.Colour] [GlobalId] [] Main.lvl10 = GHC.Enum.eftIntFB @ [Main.Colour] Main.lvl7 (GHC.Base.[] @ Main.Colour) 3 2147483647 Main.$dmenumFrom :: Main.Colour -> [Main.Colour] [GlobalId] [Arity 1 Str: DmdType S] Main.$dmenumFrom = \ (w :: Main.Colour) -> case [Main.Colour] w of wild { Main.Red -> Main.lvl8; Main.Black -> Main.lvl9; Main.Blue -> Main.lvl10 } The max bound which gets used is the one for Int, not for Colour! Perhaps this isn't a bug, but definitely an undocumented and rather unexpected 'feature'. This is with ghc-6.4 onwards, and I haven't checked earlier versions. Share and enjoy. Laszlo
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: arithmetic sequences and the prelude: minor problems?, Simon Marlow |
|---|---|
| Next by Date: | Re: unexpected arithmetic sequence and deriving Enum behaviour, Simon Marlow |
| Previous by Thread: | [GHC] #808: Move the GHC Commentary to the wiki, GHC |
| Next by Thread: | Re: unexpected arithmetic sequence and deriving Enum behaviour, Simon Marlow |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |