[GHC] #876: stack overflow on 'length . filter odd $ [0 .. 999999999]'

Malcolm Wallace Malcolm.Wallace at cs.york.ac.uk
Thu Aug 31 06:29:46 EDT 2006


Bulat Ziganshin <bulat.ziganshin at gmail.com> wrote:

> >  It makes sense to me that the above behaviour is seen: length is
> >  now a good
> >  consumer, but it generates 1+(1+(1+(1+... as it is consuming, and
> >  this causes a stack overflow. I don't think we can fix this while
> >  staying with fold/build fusion, so it looks to me like the patch
> >  should be reverted and the whole problem looked at post-6.6.
> 
> in general, for any function we can either implement
> 1) good consumer based on using foldr
> 2) tail-recursion
> 
> are you agree?

I'd like to point out that, if you are prepared to abandon foldr/build
fusion in favour of hylo fusion, you can code good consumers using
either foldr or foldl.  (Length is a foldl, because it uses an
accumulator.)  Foldl is tail-recursive, but this does not prevent it
being a good consumer, provided your framework of fusion laws is
sufficiently flexible.

Regards,
    Malcolm


More information about the Glasgow-haskell-users mailing list