> These are really concepts needed to make up for the limitations of a pure functional layer of abstraction in an imperative world.
Yet they have been found to be much more widely useful. Closures as callbacks, generators as the basis for coroutines, and monads for error handling, not to mention things like C#’s Linq.