Qual é a diferença entre uma lista cíclica e uma lista infinita em haskell?

Referenciando a resposta do @ dfeuer a esta pergunta:Maneira menos cara de construir uma lista cíclica em Haskell, que diz que o uso de listas cíclicas 'derrota' o coletor de lixo, pois ele mantém tudo o que você consumiu de uma lista cíclica alocada até que você elimine a referência a quaisquer células contras na lista.

Aparentemente, em Haskell, uma lista cíclica e uma lista infinita são duas coisas separadas. Este blog (https://unspecified.wordpress.com/2010/03/30/a-doubly-linked-list-in-haskell/) diz que se você implementarcycle do seguinte modo:

cycle xs = xs ++ cycle xs

é uma lista infinita, não uma lista cíclica. Para torná-lo cíclico, você deve implementá-lo desta maneira (como é encontrado no código-fonte do Prelude):

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

Qual é exatamente a diferença entre essas duas implementações? E por que, se você está segurando uma célula contrária em algum lugar de uma lista cíclica, o coletor de lixo precisa manter tudo antes de ser alocado?

questionAnswers(3)

yourAnswerToTheQuestion