úÎ!!ÞL      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJK(c) 2010 Galois, Inc./BSD-style (see the file libraries/base/LICENSE) John Launchbury, john@galois.com experimental concurrencySafeamonadIOKIncluded to maintain name-for-name compatibility with Control.Concurrent  !"#$   !"#$(c) 2010 Galois, Inc./BSD-style (see the file libraries/base/LICENSE) John Launchbury, john@galois.com experimentalconcurrency, requires STMNone’&monadIOxThe atomically function allows STM to be called directly from any monad which contains IO, i.e. is a member of MonadIO.+monadIO+n is an atomic update operation which provides both the former value and the newly computed value as a result.% &'()*+,-./0123456789:;<=>?@ABC%& '()*+,-./ 0123456789:;<=>?@ABC(c) 2010 Galois, Inc./BSD-style (see the file libraries/base/LICENSE) John Launchbury, john@galois.com experimental concurrencyNoneDmonadIOD establishes the context for Ek, by running a daemon while its argument is executing. The daemon is terminated once the argument to D finishes.EmonadIOEÿ is the main user level function of the module. The function prints its argument on stdout, prefixed by its process number. The user similarly selects the recipient by prefixing the process number, e.g. "23:". Active prompts will reprompt when !! is entered. FmonadIOFh sends output to stdout, ensuring that lines are whole and uninterrupted (including the final newline).DEFDEF(c) 2010 Galois, Inc./BSD-style (see the file libraries/base/LICENSE) John Launchbury, john@galois.com experimentalIOSafeš GHIJK GHIJKL         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ'monadIO-0.11.1.0-HLntKepA3cv1yvtgJ1uNSqControl.Concurrent.MonadIOControl.Concurrent.STM.MonadIOData.IORef.MonadIOControl.Concurrent.StdInOutbaseControl.Concurrent.ChanChanControl.Monad.IO.ClassliftIOMonadIO GHC.Conc.SynccatchSTMorElseretryThreadIdSTMTVar GHC.IORefIORefGHC.MVarMVar"stm-2.5.0.0-5ZER8mSr9Cp26UnDGtrWUNControl.Monad.STMcheckControl.Concurrent.STM.TMVarTMVarHasForkfork newEmptyMVarnewMVartakeMVarputMVarreadMVarswapMVar tryTakeMVar tryPutMVar isEmptyMVarnewChan writeChanreadChandupChan unGetChangetChanContentswriteList2ChanforkIO myThreadId killThreadthrowToyield threadDelay $fHasForkIO atomicallynewTVarreadTVar writeTVar registerDelay modifyTVar modifyTVar_ newTVarSTM readTVarSTM writeTVarSTMnewTMVar newEmptyTMVar takeTMVarputTMVar readTMVar swapTMVar tryTakeTMVar tryPutTMVar isEmptyTMVar modifyTMVar modifyTMVar_ newTMVarSTMnewEmptyTMVarSTM takeTMVarSTM putTMVarSTM readTMVarSTM swapTMVarSTMtryTakeTMVarSTMtryPutTMVarSTMisEmptyTMVarSTM setupStdInOutprompt putStrLinenewIORef readIORef writeIORef modifyIORefatomicModifyIORef