Haskell performance is a tricky story. It may be difficult to predict and explain, and it’s not the easiest thing to achieve in our programs. With functional and other declarative programming languages, code running on actual hardware tends to be much further from code written by a programmer than in the case of imperative languages. One of the consequences of this fact is that a programmer sometimes has a somewhat limited ability to affect performance directly. Although it is considered a task for a compiler to produce the best executable code possible, this goal is crucial for a developer also. Haskell laziness adds much to this intricacy. A programmer should be able to predict what is executed and what is not. Thanks to laziness, significant parts of the code may well not be evaluated at all.