Proposal: Control.Concurrent.Async

Simon Marlow marlowsd at gmail.com
Tue Jun 12 14:26:13 CEST 2012


On 12/06/2012 12:38, Gábor Lehel wrote:
> On Tue, Jun 12, 2012 at 12:58 PM, Simon Marlow<marlowsd at gmail.com>  wrote:
>> I think that now addresses all the comments that people had.
>>
>> There's one more change I'm thinking about: perhaps instead of
>>
>>   wait      :: Async a ->  IO (Either SomeException a)
>>   waitThrow :: Async a ->  IO a
>>
>> we should reverse the naming scheme, rename waitThrow to wait and wait to
>> something else (waitCatch?).  Rationale: waitThrow seems to be the version
>> we need most often, and it's simpler to use.
>>
>>   wait      :: Async a ->  IO a
>>   waitCatch :: Async a ->  IO (Either SomeException a)
>>
>> Thoughts? Better names for waitCatch?
>>
>> Latest Haddocks:
>>
>>   http://community.haskell.org/~simonmar/async/
>
> Two small ones:
>
> - In the documentation for cancel: "Has no effect if the Async has
> already", it seems like something might have been cut off.
>
> - Can we find a more accurate name for tryWait? It doesn't try and
> possibly fail to wait, it avoids waiting altogether. Maybe don'tWait,
> although that doesn't say what it does do. The only other idea I have
> is 'check' which is not very descriptive...

Good point.  How about "poll"?

Cheers,
	Simon


>
>>
>> Repo:
>>
>>   https://github.com/simonmar/async
>>
>> Cheers,
>>         Simon
>>
>>
>>
>>
>>> On 8 June 2012 09:37, Simon Marlow<marlowsd at gmail.com>    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
>>>
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://www.haskell.org/mailman/listinfo/libraries
>
>
>




More information about the Libraries mailing list