Improve {Map,Set}.fromList.
authorMilan Straka <fox@ucw.cz>
Thu, 30 Aug 2012 22:22:21 +0000 (00:22 +0200)
committerMilan Straka <fox@ucw.cz>
Thu, 30 Aug 2012 22:22:21 +0000 (00:22 +0200)
commite4e9a97fb3883b3cd5b52e4e73adcd3b9952d97a
treea8f3bd565d5db835db011d5242c3c363ee626a54
parent3bb336f2ca9dcd408e245e28d2a55b75df8636fa
Improve {Map,Set}.fromList.

While the input is sorted, use implementation of fromDistinctAscList.
When first unordered key is found, switch to the general fromList
implementation, which inserts the rest of the keys to the already
constructed tree.

This gives a huge advantage for sorted inputs. The inplementation is
5% (for Map) and 0% (for Set) slower than fromDistinctAscList in that case.
The larger overhead for Map is probably because of the the pair unpacking.

For input list of size 2^12, the fromList is 10 times faster if the input
is sorted.

The fromList could be further improved by trying to handle semi-sorted
inputs. But currently I have no idea how to do it efficiently.
Data/Map/Base.hs
Data/Map/Strict.hs
Data/Set/Base.hs