You might have noticed the lack of random access in the list. This is true for many functional collections in Haskell. Even if you have random access, the persistence in Haskell means that we cannot modify the element in place without sacrificing purity. Hence, it can be seen that at times, the functional algorithms are a tad bit slower than their imperative counterparts. However, designed carefully, we can almost always match the performance of imperative language with the elegance of functional programming.