
I uploaded a package that creates an STM layer over a network connection: http://hackage.haskell.org/package/stm-channelize I haven't used it in anger yet, but I hope it's a step in the right direction. I included a sample chat client and server. The client is pretty cute: main = let connect = connectTo "localhost" (PortNumber 1234) >>= connectHandle in channelize connect $ \conn -> channelize connectStdio $ \stdio -> forever $ atomically $ (recv conn >>= send stdio) `orElse` (recv stdio >>= send conn) I use channelize on both the network connection, and on stdin/stdout. The server is much longer, but shouldn't be terribly confusing. It demonstrates kicking out a client without a dangerous asynchronous exception, something we can't do easily without waiting on alternatives (i.e. orElse). -Joey