PROPOSAL: Restrict the type of (^), (^^), and add genericPower,
lemming at henning-thielemann.de
Sat Nov 17 13:11:22 EST 2007
On Sat, 17 Nov 2007, Cale Gibbard wrote:
> On 17/11/2007, Ian Lynagh <igloo at earth.li> wrote:
> > This proposal is about making (^) and (^^) consistent with everything
> > else. Making everything use Integer rather than Int is an orthogonal
> > question.
> > Someone could also make a Prelude.Integer module, that exports
> > foo :: ... Integer ...
> > foo = genericFoo
> > for various foo which are specialised to Int in Prelude, and reexports
> > all other functions from Prelude. Getting rid of implicit Prelude
> > imports would help too.
> > Thanks
> > Ian
> I don't want the types specialised to Integer either though. I'd want
> to have the types be as generic as possible, but include appropriate
> pragmas to tell GHC how to optimise when they're applied
As Ian pointed to, general types for exponents are rarely used in the code
he explored. This is also my experience from doing math with Haskell. Did
you make a different experience? The proposal isn't about removing the
polymorphism of (^), but to shift it to an alphanumerically named
function. I find "to have the types be as generic as possible" isn't
always a good design strategy, especially in this case, where the type of
the exponent cannot be infered from other operands. Thus in many cases the
compiler has to choose a default type. It's just like I find
(*) :: (Multiplyable a b c) => a -> b -> c
not a good idea, say for various multiplications in linear algebra,
because of lost type inference.
More information about the Libraries