
#10011: The Data instance for Ratio violates internal invariants. -------------------------------------+------------------------------------- Reporter: ekmett | Owner: Type: bug | Status: new Priority: normal | Milestone: 7.10.1 Component: Core Libraries | Version: 7.10.1-rc1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect result | Unknown/Multiple at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: Phab:D625 -------------------------------------+------------------------------------- Comment (by ekmett): Basically (==) on Ratio rightfully assumes that the rational is already in lowest terms, and just compares values. {{{
2 % 4 1 % 2 }}}
The test there sneaks into (1 % 2) with the old illegal Data instance and turns it into (2 :% 4), which isn't reduced, demonstrating that it is possible to produce an illegal Rational with the current instance. You could also other illegal values such as infinities, NaN-like things, negative denominators, etc. before by playing with Data.Data. All of which are ruled out by design elsewhere in the API for Rational. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10011#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler