A very academic answer:
Functional programming is a branch of programming that expresses algorithms using lambda calculus.
Whereas object-oriented and imperative programming express algorithms as Turing machines.
The famous Church-Turing Thesis describes the duality that any function computable by a Turing machine is computable by a lambda calculus and vice versa.
Haskell Curry interestingly was one of the discoverers of the y-combinator, a important function in lambda calculus. For this reason he is the namesake of Haskell and currying.