
The Ratio data type suffers from numeric overflow. For example, consider the Ord declaration in the Haskell 98 Report (I'm looking at page 153, section 12.1 of http://haskell.org/definition/haskell98-report.pdf): (x:%y) <= (x':%y') = x * y' <= x' * y It is easy to see that Ratio Int is not well-ordered under this definition, because of overflow. This is a self-contradiction in the Report, since page 84 (section 6.3.2) says that "The Ord class is used for totally ordered datatypes". I think the best way to resolve this contradiction is to avoid overflow. For example, the following definition works: (x:%y) <= (x':%y') = (toInteger x) * (toInteger y') <= (toInteger x') * (toInteger y) I submitted a complete patch at http://hackage.haskell.org/trac/ghc/ticket/1517, but that was apparently the wrong place, since the bug was closed as wontfix. Is there a chance of getting this contradiction resolved? I'll be happy to provide unit tests for the change if that will help get it applied.