Mainly because GHC doesn't grow the heap fast enough, so it spends to much time growing the heap, and not enough collecting the heap in parallell. If you use the (illegal) -A400M setting to preallocate the heap size, GHC is very, very fast.
There's not much we can do here, short of a -server flag that would increase all the limits for such situations.
Try +RTS -H (no argument) with GHC 7.0.1. I can rename it to -server if that would help :-) But you'd have to wait for another release cycle.
С другой стороны мы видим такое мнение:
OCaml makes performance transparent and gives you the ability to improve it with a high glass ceiling. I prefer that to hiding the controls and using ad-hoc rules to tweak things behind your back, rendering performance unpredictable and making it hard to optimize your code.