Co się dzieje w tej funkcji (haskell)?

Mam tę funkcję haskell, której zupełnie nie rozumiem.

ns :: [Integer]
ns = 0 : [n+k | (n, k) <- zip ns [1,3..]]

Jestem proszony o „wzięcie 3 ns”.

Myślałem, że ns jest stałe, więc rozpakuje się tylko z pierwszym elementem listy, dając (0,1). Następnie po dodaniu daje odpowiedź 1. Wtedy mówi „weź 3 ns”, więc spakowałem 0 z pierwszymi 5 elementami listy, dając ... (0,1), (0,3), (0,5 ) a następnie po dodaniu otrzymuję ostateczną odpowiedź [1,3,5]. Nie jest to jednak poprawna odpowiedź.

Co właściwie dzieje się z ns? Staram się zrozumieć ...

questionAnswers(5)

yourAnswerToTheQuestion