
It appears there are several implementations existing on Hackage of the following function, in various disguises: runPar :: [IO a] -> IO [a] the idea being that the IO computations are run in parallel, rather than sequentially. My own Streaming Component Combinators package contains a similar function, but somewhat generalized: class Monad m => ParallelizableMonad m where parallelize :: m a -> m b -> m (a, b) instance ParallelizableMonad IO -- implemented using forkIO instance ParallelizableMonad Identity -- implemented using par instance ParallelizableMonad Maybe -- implemented using par Would there be any interest in having this class packaged in a separate library? If so, can you sugest a better name or some additional functionality?