Pre-dates usable functional programming languages.
> immutability
Good point. Even if it doesn't have much to do much with functional programming, it did originate from FP languages.
> closures, generators, monads
These are really concepts needed to make up for the limitations of a pure functional layer of abstraction in a imperative world.