That's why some researchers in the field of lazy functional language have developed techniques for "optimistic evaluation" -- basically, the compiler uses strict evaluation until it's determined that the object it's evaluating can't be evaluated strictly (for example, in the case of a conceptually infinite list). You still get lazy semantics, and you have most of the performance benefits of a strict language. See the work of Robert Ennals and Jan-Willem Maessen.
See Simon Peyton-Jones et al's paper "Improving the world's most popular functional programming language: user-defined functions in Excel". (It's just a coincidence that he works for Microsoft Research, really!)
That's why some researchers in the field of lazy functional language have developed techniques for "optimistic evaluation" -- basically, the compiler uses strict evaluation until it's determined that the object it's evaluating can't be evaluated strictly (for example, in the case of a conceptually infinite list). You still get lazy semantics, and you have most of the performance benefits of a strict language. See the work of Robert Ennals and Jan-Willem Maessen.