Cofree comonads are coinductive, and in a general setting won’t necessarily have folds (because they’re nonterminating). In Haskell and similar languages, inductive and coinductive types coincide, so we don’t always notice this. The old Jacobs/Rutten tutorial might be of interest to you: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.37.1418
So what you are saying is that a fold is not provided because it would not necessarily be terminating, right? But an unfold may also easily be non-terminating, may it not? And can we not have productive folds, given laziness? Either I am missing something or this is not an applicable reason.
A very nice tutorial. I added it to my reading list. But it is also quite long, and at this time I cannot give it the time and attention it requires. Is there some specific section I should read before proceeding with the present inquiry?
Thanks Chris. I overlooked the support for recursion schemes. I had some worries about rolling out my own folds in production, but now I see that my fears are unfounded and from the practical standpoint these free comonads are production ready.