В чем разница между циклическим списком и бесконечным списком в haskell?

Ссылка на ответ @ dfeuer на этот вопрос:Наименее дорогой способ построения циклического списка в HaskellЭто говорит о том, что использование циклических списков «побеждает» сборщик мусора, так как он должен сохранять все, что вы использовали, из выделенного циклического списка, пока вы не отбросите ссылку на любые cons-ячейки в списке.

По-видимому, в Haskell циклический список и бесконечный список - это две разные вещи. Этот блог (https://unspecified.wordpress.com/2010/03/30/a-doubly-linked-list-in-haskell/) говорит, что если вы реализуетеcycle следующее:

cycle xs = xs ++ cycle xs

это бесконечный список, а не циклический список. Чтобы сделать его циклическим, вы должны реализовать его следующим образом (как показано в исходном коде Prelude):

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

В чем именно разница между этими двумя реализациями? И почему же, если вы держите одну консовую ячейку где-то в циклическом списке, сборщик мусора должен сохранить все до того, как он будет выделен?

Ответы на вопрос(3)

Ваш ответ на вопрос