Haskell is the best language to use if you just want to play with clever ideas and don't want to write a real program (at least one that deals heavily with changing state or external libraries, which is most of them). Probably the best for writing a compiler or theorem prover or something.
Common misconception. People think that just because monads are derived from some funky mathematics they must be complex. In reality it's simplicity itself to use the IO monad to communicate with the outside world. Syntactically imperative code in Haskell really is no different than other languages except that your results are tagged with the IO type, which is a Good Thing.
People who say Haskell can't do state/IO/FFI/whatever have never looked at Haskell beyond the one line quicksort implementation that periodically gets posted by some smug Haskell weenie.