<div dir="ltr">In an attempt to understand why cata- and anamorphisms are considered so important, I found multiple implications that you can write any recursive functions in terms of nonrecursive functions and ana, cata (am I right here?) so I&#39;m trying to practice the rewrite by a few functions. I&#39;m following a recipe found here:<br>

<div><br><a href="http://lambda-the-ultimate.org/node/4290">http://lambda-the-ultimate.org/node/4290</a><br clear="all"><br>~~~<br>Given a function that recurses on itself, do a partial CPS transform so 
that it only ever recurses on itself with tail calls.  Then, convert the
 recursive calls to codata returns, so that the function either returns 
TheAnswer or StillWorking with enough parameters to describe the 
recursive call / continuation state.  This codata can be built with an 
unfold and can be collapsed back down to the final answer with a fold.<br>~~~<br><br><br><a href="https://github.com/nushio3/practice/blob/master/lens/banana/CollatzTest.hs">https://github.com/nushio3/practice/blob/master/lens/banana/CollatzTest.hs</a><br>

<a href="https://github.com/nushio3/practice/blob/master/lens/banana/FibTest.hs">https://github.com/nushio3/practice/blob/master/lens/banana/FibTest.hs</a><br><br></div><div>I find it difficult to understand the terminology, and the above attempts are only halfway done. I guess ( 
TheAnswer or StillWorking ) structure is the one found in iteratee/enumeratee. But I don&#39;t know how to &quot;build a codata with unfold.&quot; <br><br></div><div>I&#39;d appreciate any advice.<br></div><div><br></div>

<div>Best,<br><br></div><div>-- <br>Takayuki MURANUSHI<br>The Hakubi Center for Advanced Research, Kyoto University<br><a href="http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html" target="_blank">http://www.hakubi.kyoto-u.ac.jp/02_mem/h22/muranushi.html</a>
</div></div>