Was ist der Unterschied zwischen einer zyklischen Liste und einer unendlichen Liste in haskell?

Referenzierung der Antwort von @dfeuer auf diese Frage:Die kostengünstigste Möglichkeit, eine zyklische Liste in Haskell zu erstellen, der besagt, dass die Verwendung von zyklischen Listen den Garbage Collector "besiegt", da er alles, was Sie verbraucht haben, aus einer zyklischen Liste entfernen muss, bis Sie den Verweis auf die Konsistenzellen in der Liste löschen.

Anscheinend sind in Haskell eine zyklische Liste und eine unendliche Liste zwei getrennte Dinge. Dieser Blog (https://unspecified.wordpress.com/2010/03/30/a-doubly-linked-list-in-haskell/) sagt das, wenn Sie implementierencycle wie folgt:

cycle xs = xs ++ cycle xs

Es ist eine unendliche Liste, keine zyklische Liste. Um es zyklisch zu machen, müssen Sie es so implementieren (wie es im Prelude-Quellcode zu finden ist):

cycle xs = xs' where xs' = xs ++ xs'

Was genau ist der Unterschied zwischen diesen beiden Implementierungen? Und warum muss der Garbage Collector, wenn Sie sich an einer Stelle in einer zyklischen Liste festhalten, alles aufbewahren, bevor er es auch zuweist?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage