I would be -1 on changing genericLength to be strict. I for one _have_ been known to use genericLength with the one point compactification of the naturals to get lazy bound comparisons and use this in production code.

However, I would be +1 on adding a separate strict genericLength' to call attention to the issue.

-Edward


On Sat, Aug 2, 2014 at 10:02 PM, David Feuer <david.feuer@gmail.com> wrote:

As far as I can tell, Haskell 2010 does not specify anything about the strictness of genericLength. Currently, it is maximally lazy. This is good, I suppose, if you want to support lists that are very long and are using floating point or some similarly broken Num instance.

But this is not something many (any?) people have any interest in doing. As a result, the genericLength function is on a nice little list I found of Haskell functions one should never use. I therefore propose that we change it to something nice and simple, like

genericLength = foldl' 0 (\x _ -> x + 1)

Admittedly, this may not be optimal for Int8, Int16, Word8, or Word16, so we may need to use rules to rewrite these four to narrow the result of length (or some such).


_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries