<p dir="ltr">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.</p>

<p dir="ltr">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</p>

<p dir="ltr">genericLength = foldl' 0 (\x _ -> x + 1)</p>
<p dir="ltr">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).</p>