Improve properFraction for Ratio
We define
properFraction (x:%y) = (fromInteger (toInteger q), r:%y)
where (q, r) = quotRem x y
The first problem is that this produces a lazy pair. The second problem is that it uses fromInteger . toInteger
rather than fromIntegral
; the latter has rewrite rules that the former lacks. The whole thing should be written as
properFraction (x:%y) = (q', r:%y)
where !(q, r) = quotRem x y
!q' = fromIntegral q
or possibly
properFraction (x:%y) = (fromIntegral q, r:%y)
where !(q, r) = quotRem x y
The latter is better if someone only wants the fractional part and is using Integral
types for which fromIntegral
is unusually expensive, but I don't know if that's really worth worrying about.
Trac metadata
Trac field | Value |
---|---|
Version | 8.6.3 |
Type | Task |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Core Libraries |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |