[GHC] #1902: Restrict the type of (^), (^^), and add genericPower,
genericPower'
GHC
trac at galois.com
Sat Nov 17 08:58:50 EST 2007
#1902: Restrict the type of (^), (^^), and add genericPower, genericPower'
-------------------------------+--------------------------------------------
Reporter: igloo | Owner:
Type: proposal | Status: new
Priority: normal | Milestone: Not GHC
Component: libraries/base | Version: 6.8.1
Severity: normal | Keywords:
Difficulty: Unknown | Testcase:
Architecture: Unknown | Os: Unknown
-------------------------------+--------------------------------------------
This got a warm reception when I mentioned it in
http://www.haskell.org/pipermail/haskell-cafe/2007-June/027557.html so I'm
formally proposing it now.
Note that this is a divergence from Haskell 98 (but the libraries already
have a handful of small divergences, and Haskell' is just around the
corner...).
In my opinion, `(^)` has the wrong type. Just as we have, for example,
{{{
(!!) :: [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
}}}
(or some other function name). The same goes for `(^^)` (`genericPower'`).
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.
The impact to GHC's bootlibs and extralibs is minimal. In most cases we
have things like `2^15`, where Int is clearly fine, although it happens to
be defaulted to Integer currently. In `Data.Complex` we have 2 cases of
`e^(2::Int)` which can now be beautified. There are several cases where
the type is inferred to be `Int` anyway.
There are 3 files where we really do have an Integer, and it does matter.
They are all for parsing numbers of the form 18e43, in
`base/Text/Read/Lex.hs`, `parsec/Text/ParserCombinators/Parsec/Token.hs`
and `haskell-src/Language/Haskell/Lexer.hs`.
Initial deadline: 1 Dec 2007.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1902>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list