<div dir="ltr"><p dir="ltr">You might also be intrested in my and oleg's paper "reflection without remorse" which discusses this construction in a more general setting, the problems with it and their solution</p>
<p dir="ltr">Paper: <a href="http://homepages.cwi.nl/~ploeg/papers/zseq.pdf">http://homepages.cwi.nl/~ploeg/papers/zseq.pdf</a> </p>
<p dir="ltr">Talk: <a href="https://www.youtube.com/watch?v=_XoI65Rxmss">https://www.youtube.com/watch?v=_XoI65Rxmss</a></p><p dir="ltr"><br></p><p dir="ltr">On Nov 18, 2014 5:38 PM, "Arie Peterson" <<a href="mailto:ariep@xs4all.nl" target="_blank">ariep@xs4all.nl</a>> wrote:</p><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">> What about my doubts on why it works so lazily?<br>
<br>
Suppose 'f' is the function '(1 :)', and 'g' is some other unspecified other<br>
function of type '[Integer] -> [Integer]' ("difference list").<br>
<br>
You may evaluate the concatenation '(f . g) []' like this:<br>
<br>
(f . g) []<br>
  = f (g [])<br>
  = 1 : g []<br>
<br>
and at this point, you already have partial knowledge of the resulting list.<br>
<br>
Note that we use "lazy evaluation", in the sense that we do not evaluate the<br>
argument 'g []' to the function 'f' right away, but proceed by first<br>
substituting the definition of 'f'.<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div>
</div>