>>20
I realize that Haskell can do IO/FFI. I'm just under the impression that the main advantages of its advanced static type system (over, say, Lisp) are:
1. Safety
2. Performance
3. Laziness
While what I really want in a language is expressivity and programmer convenience. I guess if you like bondage and discipline the safety aspect would be very appealling. Laziness is convenient, but it makes it harder to reason about when things are actually computed, and delaying the evaluation of some computations is not difficult in a dynamic language. And for 90% of the code in most programs, performance is not that important, and the rest is likely to be written in C++ anyway.
Also, it seems like although state is possible it is more awkward. For example, say you want to introduce some caching behavior to an otherwise pure function. Do you add the IO type everywhere that it is called? Use unsafePerformIO? This question does not come up in other languages.
Also, what do you do for algorithms that would ordinarily use mutable storage? Say I want to cache images by their name. Usually I would just put them in a hash table. What would I do in Haskell? (I know this is possible, this is a serious question!)
One more thing: when writing FFIs to C, the interfaces are usually pretty procedural. So if I wrote the FFI straightforwardly would I be forced to program in a more procedural style anyway (and lose some of Haskell's benefits)?
I'm sure Haskell is a great language for some things, but the lack of real world projects leaves me skeptical.
See:
http://www.jerf.org/iri/2007/02/19/2568.html