Thomas Hallgren <hallgren@cse.ogi.edu> writes:
* hugs Dec 2001: main outputs: (FromInteger (-2),True) * ghc 5.02.2: main outputs: (FromInteger (-2),True) * hbc 0.9999.5b: main outputs: (Negate (FromInteger 2),False) * nhc98 1.12: compiler outputs: Fail: What? matchAltIf at 7:13
From this I conclude that hbc is the only Haskell implementation that treats negated literals in expressions in accordance with the report, but it treats negated literals in patterns differently. Hugs and ghc treat expressions and patterns consistently, but they disagree with the report. Nhc98 appears to be buggy.
nhc98 (1.12) does appear to have a slight bug here, but it is only in the compilation of the pattern-match. If you exclude the pattern from your test, the output is (Negate (FromInteger 2)), which agrees with hbc and the Report. In addition, the CVS version now has a fix for the pattern-match bug, and the result of trueOrFalse is True, as expected. Regards, Malcolm