This is true, but laziness has its own advantages. Suppose I have two modules, Foo and Bar. Foo generates a data structure which is then consumed by Bar (possibly with some other component calling both of them). In a strict language I have to choose between one of these three options:
As I understand it it all started with laziness. I don't know if laziness is impossible without purity, but talks and papers tend to say something like "laziness has kept Haskell pure".