úΩ6N      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMIO experimental John Launchbury, john@galois.com   concurrency experimental John Launchbury, john@galois.com !"#$%&'1Included to maintain name-for-name compatibility  with Control.Concurrent ()*+,  !"#$%&'()*+,  !"#$%&'()*+, !"#$%&'()*+,concurrency, requires STM experimental John Launchbury, john@galois.com NO-BThe atomically function allows STM to be called directly from any 7 monad which contains IO, i.e. is a member of MonadIO. ./01223 is an atomic update operation which provides both < the former value and the newly computed value as a result. 3456789:;<=>?@ABCDEFGHIJ' -./0123456789:;<=>?@ABCDEFGHIJ'- ./0123456789:;<=>?@ABCDEFGHIJ-./0123456789:;<=>?@ABCDEFGHIJ concurrency experimental John Launchbury, john@galois.com PQRSKK establishes the context for L , by running F a daemon while its argument is executing. The daemon is terminated  once the argument to K finishes. TLL= is the main user level function of the module. The function J prints its argument on stdout, prefixed by its process number. The user B similarly selects the recipient by prefixing the process number,  e.g. 23:4. Active prompts will reprompt when !! is entered. UVMM7 sends output to stdout, ensuring that lines are whole 2 and uninterrupted (including the final newline). KLMKLMKLMW      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdmonadIO-0.9.2.0Control.Concurrent.MonadIOControl.Concurrent.STM.MonadIOData.IORef.MonadIOControl.Concurrent.StdInOutbaseControl.Concurrent.ChanChanGHC.ConcalwaysalwaysSucceedscatchSTMorElseretryThreadIdSTMTVar GHC.IORefIORefGHC.MVarMVar mtl-1.1.1.0Control.Monad.TransliftIOMonadIO stm-2.1.2.2Control.Monad.STMcheckControl.Concurrent.STM.TMVarTMVarnewIORef readIORef writeIORef modifyIORefatomicModifyIORefHasForkfork newEmptyMVarnewMVartakeMVarputMVarreadMVarswapMVar tryTakeMVar tryPutMVar isEmptyMVarnewChan writeChanreadChandupChan unGetChan isEmptyChangetChanContentswriteList2ChanforkIO myThreadId killThreadthrowToyield threadDelay atomicallynewTVarreadTVar writeTVar registerDelay modifyTVar modifyTVar_ newTVarSTM readTVarSTM writeTVarSTMnewTMVar newEmptyTMVar takeTMVarputTMVar readTMVar swapTMVar tryTakeTMVar tryPutTMVar isEmptyTMVar modifyTMVar modifyTMVar_ newTMVarSTMnewEmptyTMVarSTM takeTMVarSTM putTMVarSTM readTMVarSTM swapTMVarSTMtryTakeTMVarSTMtryPutTMVarSTMisEmptyTMVarSTM setupStdInOutprompt putStrLineStdinoutflag timeDelaystd inputScanmyThreadNumbermatch