¿Cuál es la diferencia entre una lista cíclica y una lista infinita en Haskell?

Referenciando la respuesta de @ dfeuer a esta pregunta:La forma menos costosa de construir una lista cíclica en Haskell, que dice que el uso de listas cíclicas 'derrota' al recolector de basura ya que tiene que mantener todo lo que ha consumido de una lista cíclica asignada hasta que elimine la referencia a las celdas de contras en la lista.

Aparentemente en Haskell, una lista cíclica y una lista infinita son dos cosas separadas. Este blog (https://unspecified.wordpress.com/2010/03/30/a-doubly-linked-list-in-haskell/) dice que si implementacycle como sigue:

cycle xs = xs ++ cycle xs

Es una lista infinita, no una lista cíclica. Para hacerlo cíclico, debe implementarlo de esta manera (como se encuentra en el código fuente de Prelude):

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

¿Cuál es exactamente la diferencia entre estas dos implementaciones? ¿Y por qué si se mantiene en una celda de contras en algún lugar de una lista cíclica, el recolector de basura tiene que guardar todo antes de asignarlo también?