O que está acontecendo nessa função (haskell)?

Eu tenho essa função haskell que não entendo direito.

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

Me pedem para "tomar 3 ns".

Eu pensei que ns era constante, então seria apenas zip com o primeiro elemento da lista, dando (0,1). Então, quando adicionado, dá uma resposta de 1. Em seguida, diz "pegue 3 ns", então eu fechei 0 com os 5 primeiros elementos da lista, fornecendo ... (0,1), (0,3), (0,5 ) e, em seguida, quando adicionado, recebo uma resposta final de [1,3,5]. No entanto, esta não é a resposta correta.

O que realmente está acontecendo com o ns? Estou lutando para entender ...

questionAnswers(5)

yourAnswerToTheQuestion