What if you could do "fully functional" programming within a language that also allows OO, procedural, and generic programming?
My exhibit would be D. Here is the 'identity' declaration:
T identity(T)(const T me) pure nothrow @safe @nogc;
It cannot have side effect (do IO,start a thread,etc) because "pure". It cannot throw any exceptions because "nothrow". It cannot do any pointer-magic shenanigans because "@safe". It cannot modify the argument because "const". It even guarantees that no memory will be allocated through the garbage collector because "@nogc".(Yes, pure by default etc would be better, but such a change would break too much code at this point. Yes, Haskell looks cleaner, but this article is not about beauty.)