Following on from ticket #4277 (closed) here is a similar patch for Data.Set .

This proposal provides a patch that improves performance for many parts of the API. Three standard techniques are applied to the code:

Worker/Wrapper transformations of recursive functions with constant arguments (aka. the static argument transformation).

Explicit inlining of wrapper functions.

Explicit strictness of keys to functions.

Three complementary, but orthogonal patches are provided.

Add a testsuite, with coverage data (currently 51% of top level functions, and all core functions).

Add a micro-benchmark suite based on Criterion, for empirical evidence of improvements to each function.

The optimization patch itself.

All 3 patches should be applied, under this proposal.

The benchmark results are relatively clear:

32% faster on OS X 10.5.8 on 2 GHz Core 2 Duo

[[Image(https://spreadsheets.google.com/oimg?key=0AurLfcdFg73_dGZKN1hONFdyVlFudTh2a3BuSTc4NXc&oid=2&zx=yh9l2q-h6cvi1)\]\]

The consideration period is 3 weeks (before ICFP).

Work carried out over 28/29th August, 2010 in Utrecht, NL, by Johan Tibell and Don Stewart.