There are only a few cases where there are undeniable advantages for a programming model based on a mutable, shared state compared to an immutable stateless model. One area where variability can bring huge benefits is for algorithms to work in place. The haskell wiki has a great example of implementing quicksort: http://www.haskell.org/haskellwiki/Introduction#When_C_is_better
To summarize it, if you do not allow changes in the memory of lists, you need to create a sorted copy of it. The same is true for almost any other algorithm that modifies some data structure, for example. AVL tree.
In general, functional programming languages tend to be more memory intensive than their imperative counterparts. Memory is cheap these days, but the bandwidth is critical, and the memory speed does not increase in proportion to the increase that we see in the processor power. It should be noted, however, that the Haskell runtime model allows the compiler to perform some nifty optimizations, also regarding memory usage and access patterns. To some extent, this can compensate for theoretical flaws.
Johannes Rudolph
source share