In general I think that haskell has a very low productivity because there are too much distracting and the gap between the real problem and the libraries is very high since there is a lot of abstraction in them. In the current state, even the haskell EDSLs are far from being close to their respective domain problems, not because Haskell is not enough flexible, but because it is too much flexible and too much abstract.
At last, a productive programming language must guide the programmer for creating valid and efficient solutions fast. The haskell type system helps in the first very well and this is a great advance, but it does not help on the latter. There are too much alternatives, too much abstraction and with a lot of impedance between them. All of this in combination with Monad transformers and the abstruse errors kill any hope of making Haskell a productive language.
Haskell is not a high level language in the usual sense, but an abstract metalanguage where the gap between the platform and the concrete solution is very long in terms of effort.
Still there is a need for an embedded general purpose high level language in which a novice can start to program fast in Haskell by freely mixing effects without a master in monad transformers, packages idiosyncrasies and error intricacies.
That is why I'm trying to create Transient: a flat monad with very high level effects included, (upto distributed computing). That eliminates the impedances and reduce complexity to a minimum level.