Solution (source code)

= Solution

The standard <Haskell> definition and principal type are

``
iterate :: (a -> a) -> a -> [a]
iterate f x = x : iterate f (f x)
``

Under <lazy evaluation>, this produces successive states $x,f(x),f(f(x)),\ldots$ as demanded. An infinite spine does not require all elements to be evaluated at once; <productivity> still depends on the demanded computations terminating.