Haskell is the most popular and well-developed pure functional language. Most of the reasons given for using MlLanguage apply to Haskell as well.
"Haskell is a general-purpose, lazy, type-safe, pure functional language that will make your applications, smaller, easier to understand, and have fewer bugs!" -- The Lambda Complex
HaWiki, the Haskell Wiki
Purely functional
Haskell is purely functional whereas MlLanguage has imperative programming functionality (destructive updates), Haskell only consists of purely functional constructs. At a start this may seem to be a problem but a clever concept, monads, allows you to express imperative style programming in the purely functional environment. This is needed since it makes communication with imperative systems possible, without loosing the added expressibility of Purely functional languages.
When destructive updates are disallowed from a language we gain benefits since we can be sure a function application f(5) always returns the same value, whenever we call it.
This allows for EquationalReasoning where we can mathematically substitute values and rearrange code without changing the Semantics of the program.
Lazy
Most languages are CallByValue. Haskell is CallByNeed. That is, we only apply a function if we have to in order to get the result. This is computationally expensive and Lazy programs are hard to optimize for a compiler. On the other hand a number of optimizations apply to Lazy languages only. Deforestation is one such optimization.
