Solution

ID: past-exam-of-the-year-1-of-the-computer-science-course-of-the-university-of-oxford/2017/functional-programming-design-and-analysis-of-algorithms-resit/4/b/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 as demanded. An infinite spine does not require all elements to be evaluated at once; productivity still depends on the demanded computations terminating.

New to topics? Read the docs here!