iterate package:base

iterate f x returns an infinite list of repeated applications of f to x:
iterate f x == [x, f x, f (f x), ...]

Laziness

Note that iterate is lazy, potentially leading to thunk build-up if the consumer doesn't force each iterate. See iterate' for a strict variant of this function.
>>> take 1 $ iterate undefined 42
[42]

Examples

>>> take 10 $ iterate not True
[True,False,True,False,True,False,True,False,True,False]
>>> take 10 $ iterate (+3) 42
[42,45,48,51,54,57,60,63,66,69]
iterate id == repeat:
>>> take 10 $ iterate id 1
[1,1,1,1,1,1,1,1,1,1]
iterate f x produces the infinite sequence of repeated applications of f to x.
iterate f x = x :| [f x, f (f x), ..]
iterate' is the strict version of iterate. It forces the result of each application of the function to weak head normal form (WHNF) before proceeding.
>>> take 1 $ iterate' undefined 42
*** Exception: Prelude.undefined
Replace with the closest visual match upon an illegal sequence