[Haskell-cafe] Numerics and Warnings
jwlato at gmail.com
Thu Apr 11 06:23:09 CEST 2013
The issue with this example is that you have
genericTake :: Integral a => a -> [b] -> [b]
where the 'a' is converted to an Int without being checked for overflow.
IMHO type defaulting is irrelevant for this one problem; evaluating
> take 444444444444444444444444444444 "foobar"
has exactly the same result without any defaulting taking place. Arguably
fromIntegral could have other behavior (error/exception/Maybe) when a
conversion would overflow, but that seems like a very significant change.
Aside from this example, I'm quite sympathetic to the issue. I've more
than once defined values as
let two = 2 :: Int
three = 3 :: Int
solely to suppress warnings about type defaulting for (^n).
Really, I'd prefer to see the Prelude export
(^) :: Num a => a -> Int -> a
I think that's the most common case, and it's probably never useful to
raise to a power greater than (maxBound :: Int).
On Thu, Apr 11, 2013 at 8:10 AM, Tom Ellis <
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> wrote:
> On Thu, Apr 11, 2013 at 12:56:05AM +0100, Barak A. Pearlmutter wrote:
> > > ... in most of the cases I do want this warnings. It's possible to get
> > > something default to Integer when it should be Int. There are only few
> > > cases when it's not appropriate. Only ^ and ^^ with literals I think
> > There are a few other cases, albeit less annoying. Like this:
> > c = fromIntegral 2 :: Int
> > Granted this is silly code, but the same case arises inside pretty much
> > any code that is generic over Integral, in which case the warning you
> > get is not the *right* warning. Example:
> > genericTake n xs = take (fromIntegral n) xs
> > genericTake 444444444444444444444444444444 "foobar"
> Hi Barak,
> I don't write a lot of numeric code so I am under-educated in this area.
> Could you write a more substantial example so I get a clearer idea of
> going on?
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe