deepseq-bounded, seqaid, leakyThis trio of related packages explores strictness control in a variety of ways.
deepseq-bounded provides classes and generic functions to artificially force evaluation, to extents controlled by static or dynamic configuration.
seqaid puts that into practise, providing a GHC plugin to auto-instrument your package with a strictness harness, which is dynamically optimisable during runtime. This is supported directly in the GHC compilation pipeline, without requiring (or performing!) any edits to your sources.
I've started a reddit discussion page for the three together.
Easiest way to try them all, is to install seqaid and run the demo:
cabal install seqaid seqaid demo
This tests seqaid on a local copy of the leaky source package.
It turned out to be routine to extend deepseq-bounded and seqaid to dynamically configurable parallelisation (paraid?). Many other wrappers could be explored, too! Maybe seqaid should be renamed to koolaid or something...
It's a pretty complicated system, and just first release, so there's bound to be lots of problems. For now, any issues or comments can be directed to the reddit page (or private email). There's also the list announcement threads on haskell-cafe and glasgow-haskell-users for general discussion, and on ghc-devs for technical. I'll maintain a casual list of bugs and feature requests, and will set up a proper tracker if there's interest.