I've been hearing a lot of enthusiasm about functional programming languages lately, with regards to Scala, Clojure, and F#.  I've recently started studying Haskell, to learn the FP paradigm.I love it, it's really fun, and fits my math background.But will it ever really matter?  Obviously, it's hardly a new idea.Here's my questions:What has contributed to the recent FP enthusiasm?  Is is merely boredom with OO, or has something changed to make FP more needed than before?Is this indicative of a FP future?  Or is this a fad, like object orient databases?In other words, can anyone help me understand where this comes from and where it might be going?
Why the current enthusiasm for Functional Programming?
functional programming
One of the major innovations in FP that has resulted in the explosion of interest is monads.  In January of 1992, Philip Wadler wrote a paper called The Essence of Functional Programming which introduced monads into functional programming as a way to deal with IO.  The major problem with pure, lazy, functional programming languages was utility in dealing with IO.  It's one of member of the Awkward Squad in programming, because laziness and side effects are, from a practical point of view, incompatible.  If you want to use a lazy language, it pretty much has to be a purely functional language; if you want to use side effects, you had better use a strict language. Reference The issue with IO before monads was that maintaining purity was not possible for programs that were actually useful for anything.  By IO, we mean anything that deals with changing state, including getting input and output from the user or environment.  In pure functional programming, everything is immutable, to allow laziness and purity (free from side effects).How do monads solve the problem of IO?  Well, without discussing monads too much, they basically take the World (the runtime environment) as input to the monad, and produce a new World as output, and the result:  type IO a = World -> (a, World). FP has therefore entered more and more into the mainstream, because the biggest problem, IO (and others) has been solved.  Integration into existing OO languages has also been happening, as you know.  LINQ is monads, for example, through and through.For more information, I recommend reading about monads and the papers referenced in my answer.  