Proposal (breaking change, but probably not one that will break any real code): strictify genericLength

Edward Kmett ekmett at gmail.com
Sun Aug 3 12:56:42 UTC 2014


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 at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140803/479657f7/attachment.html>


More information about the Libraries mailing list