I just thought I should add the results for hbc and nhc98 to this enumeration of woes, to further illustrate the difficulties.
> i :: Int > i = 0x7fffffff > > i_plus_1 = i+1 > -- ghc : -2147483648 > -- hugs: -2147483648 -- nhc98: -2147483648 -- hbc: -2147483648 > i_succ = succ i > -- ghc : *** Exception: Prelude.Enum.succ{Int}: tried to take `succ' of maxBound > -- hugs: -2147483648 -- nhc98: -2147483648 -- hbc: -2147483648 > j :: Int > j = 0x80000000 > -- ghc : -2147483648 > -- hugs: Program error: {primIntegerToInt 2147483648} -- nhc98: -2147483648 (+ warning: decimal constant is so large that it is unsigned) -- hbc: -2147483648 > k :: Int > k = 0x100000000 > -- ghc : 0 > -- hugs: Program error: {primIntegerToInt 4294967296} -- nhc98: 0 -- hbc: 0 > i':: Integer > i'= 0x7fffffff > i_plus_1' = i+1 > -- ghc : 2147483648 > -- hugs: 2147483648 -- nhc98: 2147483648 -- hbc: 2147483648 > i_succ' = succ i' > -- ghc : 2147483648 > -- hugs: -2147483648 -- nhc98: -2147483648 -- hbc: -2147483648 > I think Hugs is wrong. Integer shouldn't wrap. (Actually, ghc is `wrong': hbc, hugs and nhc98 match the Report's specification here: succ = toEnum . (+1) . fromEnum This is confirmed by the description of the semantics in section 3.10.) > succ 1.45 > -- hugs: 2.0 > -- ghci: 2.45 -- nhc98: 2.0000000000000000 -- hbc: 2.0 > succ 1.99 > -- hugs: 2.0 > -- ghci: 2.99 -- nhc98: 2.0000000000000000 -- hbc: 2.0 > succ 1.99999 > -- hugs: 2.0 > -- ghci: 2.99999 -- nhc98: 2.0000000000000000 -- hbc: 2.0 > succ (-0.2) > -- hugs: 1.0 > -- ghci: 0.8 -- nhc98: 1.0000000000000000 -- hbc: 1.0 > succ (-0.99999) > -- hugs: 1.0 > -- ghci: 9.99999999995449e-6 -- nhc98: 1.0000000000000000 -- hbc: 1.0 > succ (-1.1) > -- hugs: 0.0 > -- ghci: -0.10000000000000009 -- nhc98: 0.0000000000000000 -- hbc: 0.0 Ghc does not follow the Report here either. > [1.0..2.5] > -- hugs: [1.0,2.0,3.0] > -- ghci: [1.0,2.0,3.0] -- nhc98: [1.0000000000000000,2.0000000000000000] -- hbc: [1.0,2.0,3.0] > [1.1..2.5] > -- hugs: [1.1,2.1] > -- ghci: [1.1,2.1] -- nhc98: [1.0000000000000000,2.0000000000000000] -- hbc: [1.1,2.1] > [1.1..3.0] > -- hugs: [1.1,2.1,3.1] > -- ghci: [1.1,2.1,3.1] -- nhc98: [1.0000000000000000,2.0000000000000000,3.0000000000000000] -- hbc: [1.1,2.1,3.1] nhc98 is wrong for all the Double arithmetic sequences. Regards, Malcolm _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell