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)
> 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.