Dear Marc,

Thanks for your explanation.
I re-explain below to ensure my understanding is correct.

> (The type of finite lists does not form an initial coalgebra so the
> notion of anamorphism does not really apply.)

You mean "final coalgebra" rather than "initial coalgebra", right?
Given a functor F(S)=1+N×S, the carry object of the final coalgebra for F is List(T)∪Stream(T), where T is the type of the elements. The set List(T)∪Stream(T) can not be expressed by lists in Scheme, because lists in Scheme are finite and Scheme is a strict language.
So the notion of anamorphism does not really apply. (But it is OK in Haskell)

> If we could define a `reverse` for infinite lists, we could explain `unfold-right`.

So this is why Scheme has `unfold-right` and Haskell has not `unfold-right`, is that right?
Because lists in Haskell are potentially infinite, we can not define a `reverse` for these infinite lists. (But it is OK in Scheme)

> But why can't we define a `reverse' for infinite lists? This is basically because the cartesian product has a right adjoint (the exponential) in our cases but not a left adjoint. (Do you see what I mean?)

I have a little background in category theory.
I know - × a ⊣ (-)ᵃ. This formula sometimes expresses currying, but what does it mean here?
Could you give me some hints?

> We could only circumvent this restriction by changing our underlying model and allowing computations that take infinitely long ...

This exactly Haskell do.

> In order to make sense of the right version in the context of coinitial coalgebras, a naive way to incorporate them is through double-ended streams.

So the rest of your mail is to explain how to implement `unfold-right` in Haskell, right?
We will use two left/right symmetry lists to express a reversible list.

> The endofunctor G underlying a double-ended stream whose elements are of type T would be X |-> 1 + (T * X * T * X)

So the mathematical name behind "unfold-right" is G-coalgebra, is that right?

> We could then unfold any G-coalgebra into a double-ended stream (the coinitial coalgebra of G);

That means `unfold-right` can be generalized to other data types by G-coalgebra and thisis the answer to my second question, right?

Could you recommend some references about this `unfold-right` stuff or G-coalgebra?
For example, is there any Haskell library implement `unfold-right` or G-coalgebra?
Or any papers explain this stuff in more detail?

Thanks again.

PS:
Sorry for the late reply.
It seems that the xxxxxx@srfi.schemers.org doesn't send any mail except daily digest.
I did not receive any mails until daily digest. I even I can't see your email address.
So this mail may not be merged into the reply-tree.
I have re-subscribed xxxxxx@srfi.schemers.org and xxxxxx@srfi.schemers.org instead.

Best regards,
Siyuan Chen