
I recently asked a similar question about strict scans (e.g. scanl') and got the same response to use a strictify function. Although I would argue that fun' is syntactically more convenient than (strictList . fun), I'd agree that composition is good. Maybe it would make sense to add to have that strictList function in Data.List instead? On Fri 01 Feb 2013 13:19:08 GMT, Daniel Fischer wrote:
On Friday 01 February 2013, 13:43:59, Andres Löh wrote:
Right, I'm not arguing that it's impossible to produce a difference,
but I think that if you're defining the sequence of fibs, the most
likely scenario might be that you're actually interested in a prefix,
Right. If you only want one Fibonacci number with a not too small index, you should use a dedicated algorithm.
I was just providing a possible answer to
Am I overlooking anything? What's your test?
to show how the desire for zipWith' might arise from the fibs example.
and more importantly, you can still, from the outside, force the
prefix even if you're only interested in a particular element. The
second point, imho, is what makes zipWith inherently different from a
function such as foldl'.
Right, and as I said in my first post, the fibs example is more of a scan than a zip. And for scans it's natural to consume the list in order [if you only want one element, a fold is the proper function].
You can equivalently define zipWith' as a
wrapper around zipWith:
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith' f xs ys = strictify (zipWith f xs ys)
where
strictify :: [a] -> [a]
strictify [] = []
strictify (x : xs) = x `seq` x : strictify xs
You cannot easily do the same for foldl and foldl'.
I don't even see how one could do it non-easily.
Cheers,
Daniel
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe