I&#39;m to blame for that page. I made the various &#39;greco&#39;-morphisms from constructive algorithmics into independently combinable features in category-extras, and page spun out of a joke on the #haskell channel from people making fun of the ever more complicated recursion schemes I was supporting. It is a fairly useless technical term for a recursion scheme that no one in their right mind would use, but &#39;zygo-&#39; &#39;histomorphic&#39; and &#39;prepromorphism&#39; all have real meanings. <br>
<br>Each of these features can be composed. They are also fairly painfully abstract. <br>
<br>A catamorphism is just a generalization of &#39;unfoldr&#39; to arbitrary algebraic data types.<br><br>A generalized catamorphism is a catamorphism that uses a distributive law for some comonad.<br><br>A zygomorphism introduces mutual recursion with a helper function. It is just a generalized catamorphism using the reader/product comonad. However, in category-extras I defined &#39;comonad transformers&#39;, including a reader/product comonad transformer, so you can modify more complicated recursion schemes by adding &#39;zygo&#39;.<br>
<br>A histomorphism gives access to &#39;results obtained so far&#39;, and a prepromorphism is a modified catamorphism that also applies a natural transformation each time it recurses. This can be done by utilizing the fact that there is a &quot;cofree comonad&quot; for any functor f, which has a natural distributive law over f. So a histomorphism is just another generalized catamorphism.<br>
<br>A prepromorphism is a slightly different animal, it applies a natural transformation each time it recurses. This lets you build up recursive operations like &#39;iterate&#39; in a more formal manner. I generalized prepromorphisms, the way that you can generalize catamorphisms, allowing them to be parameterized on an arbitrary comonad. This means that all of the machinery you can use to parameterize your catamorphisms, can now be exploited to parameterize prepromorphism.<br>
<br>Since you can apply the comonad transformer for reader to the cofree
comonad of your base functor you can make a zygohistomorphic
prepromorphism.<br>
<br>The nice thing is that you can readily dualize each of these notions and start talking about the equivalent way to build UP a structure. <br><br>One might argue that for consistency the name should be a zygohistoprepromorphism, but that starts to become unwieldy.<br>
<br>The downside is that few people have read all of the papers to know what each of those terms mean in isolation, let alone when rolled into the same recursion scheme, so I wouldn&#39;t recommend using one in production maintainable code. =)<br>
<br>-Edward Kmett<br><br><div class="gmail_quote">On Thu, Nov 5, 2009 at 5:31 PM, Deniz Dogan <span dir="ltr">&lt;<a href="mailto:deniz.a.m.dogan@gmail.com">deniz.a.m.dogan@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
2009/11/5 Andrew Coppin &lt;<a href="mailto:andrewcoppin@btinternet.com">andrewcoppin@btinternet.com</a>&gt;:<br>
<div class="im">&gt; Matus Tejiscak wrote:<br>
&gt;&gt;<br>
&gt;&gt; zygohistomorphic prepromorphisms<br>
&gt;<br>
&gt; Please tell me this isn&#39;t a real technical term. o_O<br>
<br>
</div><a href="http://www.haskell.org/haskellwiki/Zygohistomorphic_prepromorphisms" target="_blank">http://www.haskell.org/haskellwiki/Zygohistomorphic_prepromorphisms</a><br>
<br>
Still can&#39;t tell if it&#39;s a joke or not...<br>
<br>
--<br>
<font color="#888888">Deniz Dogan<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
</div></div></blockquote></div><br>