Como você (re) implementaria a iteração no Haskell?

iterate :: (a -> a) -> a -> [a]

(Como você deve saber)iterate é uma função que assume uma função e valor inicial. Em seguida, aplica a função ao valor inicial, depois aplica a mesma função ao último resultado, e assim por diante.

Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude> 

O resultado é uma lista infinita. (é por isso que eu usotake) Minha pergunta, como você implementaria seu próprioiterate' função no Haskell, usando apenas o básico ((:) (++) lambdas, combinação de padrões, guardas etc.)?

(Haskell iniciante aqui)

questionAnswers(2)

yourAnswerToTheQuestion