Turns out someone asked this question a few years ago, and there wasn't any awesome answers thenĀ https://mail.haskell.org/pipermail/haskell-cafe/2009-October/067254.html