It's the basic principle behind the ML libs for instance, none of which are made in a lazy language since it buys you nothing but really adds complexity (you can no longer do the trivial reasoning "if I ask for A B C, then A happens, then B, then C", the order is never guaranteed and these are the errors you constantly make in languages like haskell and prolog, or at least that goes for me).
This also means you can no longer explicitly optimize. And if compilers were infinitely more intelligent than me that would be fine ... but of course when it matters I can beat every compiler I've ever seen.