What to do about divMod'.

Don Stewart dons at galois.com
Fri Nov 14 23:00:42 EST 2008


lane:
> 
> Data.Fixed contains divMod' :: (Real a, Integral b) => a -> a -> (b, a)
> as well as div' and mod'.
> 
> There are two problems:
> 
> 1) Implementation of this type signature requires conversion to Rational, 
> which is extremely slow.  It really isn't usable in any kind of 
> significant loop at all.
> 
> 2) This has nothing specific to do with fixed precision arithmetic 
> despite being in the Data.Fixed module.
> 
> I played with writing a patch but I think this requires discussion.  I 
> believe the original author was aware of the problems and didn't consider 
> them urgent.
> 
> Should there be a RULES to address the performance issues?  Should this be 
> based on RealFrac or specific to Float, Double, etc?  Alternately OR 
> additionally should there be a separate set of functions created based on 
> RealFrac?

Almost certainly. Things like fromIntegral and truncate already have
extensive type-based rules.

> If we use RULES, this may make programs that depend on it effectively 
> unusable without the optimizer.  Whatever we do will probably change the 
> semantics a bit in terms of infinite/NaN, but I don't think that is likely 
> to matter.

Well, we make them the same as they currently are.

> I personally prefer changing the signature of the divMod' family, but I 
> anticipate objections.
> 
> I also think that we should make sure that the divMod' family gets inlined 
> as my understanding is this will avoid dictionary lookups and aid 
> the strictness analyzer, but I'm not 100% certain on this point.

Check the core!

-- Donn


More information about the Libraries mailing list