[Haskell-cafe] Best idiom for avoiding Defaulting warnings with
ghc -Wall -Werror ??
bayer at cpw.math.columbia.edu
Mon Jun 25 15:18:21 EDT 2007
On Mon, Jun 25, 2007 at 07:31:09PM +0100, Ian Lynagh wrote:
> I don't know if (^) in particular is what is causing you problems, but
> IMO it has the wrong type; just as we have
> (!!) :: [a] -> Int -> a
> genericIndex :: (Integral b) => [a] -> b -> a
> we should also have
> (^) :: (Num a) => a -> Int -> a
> genericPower :: (Num a, Integral b) => a -> b -> a
On Jun 25, 2007, at 11:40 AM, David Roundy wrote:
> That would be great!
Ahh, a consensus I can enthusiastically support.
It would seem to me a good library design rule of thumb to make ANY
argument that will be counted down to zero by simple recursion an
Int, with the type of (^) a standard application of this general
Even with strict evaluation and tail recursion, if I want to write
something that's going to need more than 2^31 iterations, I want the
compiler to make me jump through hoops to say so. With the current
type for (^), I'm jumping through hoops to say something that I can
more easily unroll by hand.
Your proposal for (^) would allow genericPower to use the
asymptotically faster algorithm of writing out the exponent in binary
and multiplying together repeated squares, leaving the simple
recursion to (^).
More information about the Haskell-Cafe