<div>
                    Hi
                </div><div><br></div><div>I have been looking at this fibonacci implementation:</div><div><br></div><div><div>f = 0:1:(zipWith (+) f (tail f))</div></div><div><br></div><div>and I have been trying to fit it inside my head. I am not quite there yet, though.</div><div><br></div><div>I have been tracing the steps manually like this</div><div><br></div><div><div>0:1</div><div><br></div><div>[0,1]</div><div>[1]</div><div><br></div><div>0:1:1</div><div><br></div><div>[0,1,1]</div><div>[1,1]</div><div><br></div><div>0:1:1:2</div><div><br></div><div>[0,1,1,2]</div><div>[1,1,2]</div><div><br></div><div>0:1:1:2:3</div><div><br></div><div>[0,1,1,2,3]</div><div>[1,1,2,3]</div><div><br></div><div>0:1:1:2:3:5</div></div><div><br></div><div>And it is easy to see that it works, but what I do not understand is how the two recursive applications progress. How do they evolve concurrently? For each execution of `f`, `f` will be executed twice. So how does all these results end up in the same list?</div><div><br></div><div>I guess a more general way of asking my question is how does concurrent recursion on the same result-set work?</div>
                <div><div><br></div><div>--&nbsp;</div><div>Christoffer Buchholz</div><div><br></div></div>