¿Cómo (re) implementaría iterar en Haskell?

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

(Como probablemente sabes)iterate es una función que toma una función y un valor inicial. Luego aplica la función al valor inicial, luego aplica la misma función al último resultado, y así sucesivamente.

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

El resultado es una lista infinita. (por eso usotake) Mi pregunta, ¿cómo implementarías tu propioiterate' funcionar en Haskell, utilizando solo los conceptos básicos ((:) (++) lambdas, patrón de emparejamiento, guardias, etc.)?

(Haskell principiante aquí)