[Haskell-cafe] Numerics and Warnings

John Lato 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).

John L.


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
> what's
> going on?
>
> Thanks,
>
> Tom
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130411/241f360b/attachment.htm>


More information about the Haskell-Cafe mailing list