[Haskell-cafe] How to make asynchronous I/O composable and safe?

Bardur Arantsson spam at scientician.net
Sat Jan 14 12:48:30 CET 2012


On 01/14/2012 11:42 AM, Joey Adams wrote:
> On Sat, Jan 14, 2012 at 1:29 AM, Bardur Arantsson<spam at scientician.net>  wrote:
>> So, the API becomes something like:
>>
>>    runSocketServer :: ((Chan a, Chan b) ->  IO ()) ->  ... ->  IO ()
>>
>> where the first parameter contains the "client logic" and "A" is the type of
>> the messages from the client and "B" is the type of the messages which are
>> sent back to the client.
>
> Thanks, that's a good idea.  Even if I only plan to receive in one
> thread, placing the messages in a Chan or TChan helps separate my
> application thread from the complexities of connection management.
>

Unless TCP is an absolute requirement, something like 0MQ[1,2] may be 
worth investigating.

It handles all the nasty details and you get a simple message-based 
interface with lots of nice things like pub-sub, request-reply, etc. etc.

[1] http://hackage.haskell.org/package/zeromq-haskell-0.8.2
[2] http://www.zeromq.org/





More information about the Haskell-Cafe mailing list