
On 15/06/2012 10:39, Sjoerd Visscher wrote:
On Fri, 15 Jun 2012 09:07:54 0100, Simon Marlow
wrote: I still need to ponder the Applicative version, I'm not familiar with Control.Newtype. I would still like the Traversable abstraction I mentioned in my last message.
Control.Newtype is not important. I added it just to be able to write
ala' Concurrently traverse getURL urls
instead of
runConcurrently $ traverse (Concurrently . getURL) urls
But it is probably nicer to have
doConcurrently :: Traversable t => (a -> IO b) -> t a -> IO (t b)
then you could write
doConcurrently getURL urls
and your doConcurrently would just be "doConcurrently id". I updated the code at https://gist.github.com/2926572
Thanks, I've incorporated your Concurrently type, and renamed doConcurrently to mapConcurrently (by analogy with mapM). I released async-2.0.1.0 with the latest round of changes: http://hackage.haskell.org/package/async Changes in 2.0.1.0: Added a Functor instance for Async Added asyncBound, asyncOn, asyncWithUnmask, asyncOnWithUnmask, withAsyncBound, withAsyncOn, withAsyncWithUnmask, withAsyncOnWithUnmask. Added mapConcurrently Added Concurrently (with Applicative and Alternative instances) Cheers, Simon