This package provides combinators for sequencing IO actions onto a thread pool.
The thread pool is guaranteed to contain no more unblocked threads than a
user-specified upper limit, thus minimizing contention.
Furthermore, the parallel combinators can be used reentrantly - your parallel
actions can spawn more parallel actions - without violating this property of
the thread pool.
The package is inspired by the thread
Thanks to Neil Mitchell and Bulat Ziganshin for some of the code this package
is based on.