Test your knowledge of Haskell's array primitives - Haskell - kbin.social


My guess is that it would be hard to distinguish them in performance.

It’s difficult but I guess using unsafeThawArray is OK and will be faster than both version 1 and version 2. :slight_smile:

It would indeed be faster, but that would mean the array is modified in-place, so then you would not be able to safely use the old array after mapping.

That’s a good guess, but from some preliminary benchmarks I get a difference of about 20% for some inputs. Although the benchmark is very fragile, so I still need to investigate it in more detail.

I’m getting pretty consistent results like this:

So Version 1 seems to be up to 25% faster than Version 2 when the input size is around 4,000 elements and then slowly decreases until there is not much of a difference when the input size is around 1,000,000 elements.

Interesting that the first version is faster for short arrays. I think looking at Core would be informative.