Hello,

I like the idea of using `headStrict` instead of adding another version of `iterate`.

-Iavor



On Wed, Aug 6, 2014 at 10:46 AM, Bas van Dijk <v.dijk.bas@gmail.com> wrote:

Hi David,

As suggested[1] by Takano Akio a few years ago iterate can be made strict by applying headStrict to its result:

headStrict :: [a] -> [a]
headStrict = foldr (\x y -> seq x (x : y)) []

We might want to add this to Data.List unless there are no use-cases for a lazy accumulator in iterate in which case I'm +1 for a strict implementation.

Bas

[1] http://www.haskell.org/pipermail/libraries/2012-November/018775.html

On 30 Jul 2014 02:48, "David Feuer" <david.feuer@gmail.com> wrote:

I think most if not all applications of iterate would prefer to accumulate strictly—iterating a constant function is not very useful and the spine of the result of iterate is always the same. Unlike unfoldr, which has enough strictness built in to allow its caller to decide whether to accumulate strictly, iterate is entirely lazy. I therefore propose:

iterate' :: (a -> a) -> a -> [a]
iterate' f b = unfoldr go b
  where
    go x = x `seq` Just (x, f x)


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


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