Proposal: Control.Concurrent.Async
Sjoerd Visscher
sjoerd at w3future.com
Thu Jun 14 10:59:31 CEST 2012
And perhaps an Alternative instance would also be useful:
instance Alternative Concurrently where
empty = Concurrently $ forever (threadDelay maxBound)
Concurrently as <|> Concurrently bs =
Concurrently $ either id id <$> race as bs
Where "empty" should be the cheapest way to loop forever, I don't know
if this is the best way to do that.
Sjoerd
On Wed, 13 Jun 2012 23:58:54 +0200, Sjoerd Visscher
<sjoerd at w3future.com> wrote:
Hi Simon,
>
> This a really nice and clean library!
>
> I was wondering if it would be useful to have an applicative
> interface for the concurrently function? Something like this:
>
> (page1, page2, page3) <- runConcurrently $ (,,) <$>
> Concurrently (getURL "url1") <*> Concurrently (getURL "url2")
> <*> Concurrently (getURL "url3")
>
> More code here: https://gist.github.com/2926572
>
> Thanks,
> Sjoerd
>
> On Jun 8, 2012, at 10:37 AM, Simon Marlow wrote:
>
> > I'd like to add a higher-level concurrency API to the base package.
> This API has grown while I've been working on examples for my book,
> and I'm convinced that we should have something like this in the
> standard libraries. Here's the API I propose:
> > >
> http://community.haskell.org/~simonmar/async-stm/Control-Concurrent-Async.html
> > > In fact it already exists in at least two packages on Hackage:
> 'async' and 'threads'. My version is a superset of both of these,
> except for a few small differences (which are up for discussion, of
> course).
> > > One good reason to have this package is that it avoids some
> common pitfalls, such as forgetting to handle exceptions in your
> child threads. In the Async API, you get to choose whether to (a)
> receive the result as 'Either SomeException a', or (b) have the
> exception re-thrown in the waiting thread. You don't get to ignore
> it altogether.
> > > Another common pitfall avoided by this library is accidentally
> leaving threads running in the background. This is handled by
> withAsync:
> > > withAsync :: IO a -> (Async a -> IO b) -> IO b
> > > the child thread is always cancelled (i.e. killed) when the
> second argument returns or throws an exception, if it hasn't finished
> already.
> > > > I'm opening this up for discussion so that we can tidy up any
> inconsistent details and add any functions that people feel are
> missing. Naming is obviously up for discussion too.
> > > Cheers,
> > Simon
> > > > > _______________________________________________
> > Libraries mailing list
> > Libraries at haskell.org
> > http://www.haskell.org/mailman/listinfo/libraries
> > --
> Sjoerd Visscher
> https://github.com/sjoerdvisscher/blog
>
>
>
>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
--
Sjoerd Visscher
http://w3future.com/
More information about the Libraries
mailing list