Понимание рекурсивно определенного списка (выдумки в терминах zipWith)

Я изучаю Haskell и наткнулся на следующий код:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

, с анализом которого у меня возникли некоторые проблемы с точки зрения его работы.Это очень удобно, я понимаю, что больше ничего не нужно, но я хотел бы понять, как Haskell удается «заполнять» выдумки, когда я пишу:

take 50 fibs

Любая помощь?

Спасибо!

67
задан Will Ness 10 October 2019 в 10:31
поделиться