PROPOSAL: Restrict the type of (^), (^^), and add genericPower,
lemming at henning-thielemann.de
Sat Nov 17 16:13:54 EST 2007
On Sat, 17 Nov 2007, David Benbennick wrote:
> I vote against this proposal.
> On 11/17/07, Ian Lynagh <igloo at earth.li> wrote:
> > In my experience this would remove 99.9% of all defaulting (mostly where
> > you write things like x^12 and 8^12), which means it's easier to get
> > -Wall clean without having to put :: Int annotations everywhere.
> I agree that is a benefit (making it easier to avoid warnings), but in
> my opinion it is a tiny benefit.
Let me guess - you don't use -Wall. :-) Warnings are not the problem,
warnings point to a problem. The problem here is, that the compiler has to
guess a type, because it cannot be infered from other operands.
> The inverse proposal has the same benefit, and doesn't require a
> change to GHC: just add intPower to your own code, and use it wherever
> you want. If you are unhappy with the idea of using intPower, perhaps
> you understand why I'm unhappy with the prospect of having to use
Question: How often did you need the genericity of Haskell 98 (^) ? That
is, how often do you call (^) with a non-constant exponent and how often
is the exponent constant?
If I have (^) with variable exponents too often in the code, I suspect
that I missed some optimizations like (iterate (x*) 1).
I have done (semi-automatically) some statistics on my mathematical stuff
in Haskell, namely
(^^) used with exponents
(^) used with variable exponents
mod n 2
mod (p+1) 2
(^) used with constant exponents
2: 169 times
3: 31 times
4: 9 times
5: 10 times
6: 3 times
7: 2 times
8: 1 times
9: 1 times
If I search for '::Int', the most results are exponents of (^), others are
from enumerations like [(0::Int)..].
More information about the Libraries