Language statements define functions and execute them.
Functions have no side effects.
Functions are first class objects - they can be passed and returned from other functions.
Data may be immutable.
Examples: Haskell, Lisp, parts of JavaScript, small parts of C++, i.e., lambdas, template-meta programming