63o%      !"#$ %&'()*+,-./01 %'*+,-./01 %'*+,-./01non-portable (requires STM) experimentallibraries@haskell.org 2345= is an abstract type representing an unbounded FIFO channel. 6$Build and returns a new instance of  IO version of ). This is useful for creating top-level  s using  System.IO.Unsafe.unsafePerformIO, because using    inside  System.IO.Unsafe.unsafePerformIO isn't  possible. Write a value to a . Read the next value from the .  Duplicate a :: the duplicate channel begins empty, but data written to N either channel from then on will be available from both. Hence this creates F a kind of broadcast channel, where data written by anyone is seen by  everyone else. JPut a data item back onto a channel, where it will be the next item read. Returns 7 if the supplied  is empty. non-portable (requires STM) experimentallibraries@haskell.org A # is a synchronising variable, used Dfor communication between concurrent threads. It can be thought of &as a box, which may be empty or full. 8 Create a $ which contains the supplied value. IO version of ). This is useful for creating top-level  s using  System.IO.Unsafe.unsafePerformIO, because using    inside  System.IO.Unsafe.unsafePerformIO isn't  possible.  Create a  which is initially empty. IO version of ). This is useful for creating top-level  s using  System.IO.Unsafe.unsafePerformIO, because using    inside  System.IO.Unsafe.unsafePerformIO isn't  possible. Return the contents of the  . If the  is currently  empty, the transaction will   . After a ,  the  is left empty.  A version of  that does not  . The   function returns 9 if the  was empty, or : a if  the  was full with contents a . After , the   is left empty. Put a value into a  . If the  is currently full,   will  .  A version of  that does not  . The  $ function attempts to put the value a into the  , returning  7 if it was successful, or ; otherwise. This is a combination of  and ; ie. it takes the value  from the %, puts it back, and also returns it. !Swap the contents of a  for a new value. "Check whether a given  is empty. >Notice that the boolean value returned is just a snapshot of  the state of the .. By the time you get to react on its result,  the 5 may have been filled (or emptied) - so be extremely * careful when using this operation. Use  instead if possible.  !"  !"  !"non-portable (requires STM) experimentallibraries@haskell.orgnon-portable (requires STM) experimentallibraries@haskell.org#6TArray is a transactional array, supporting the usual <  interface for mutable arrays. It is currently implemented as Array ix (TVar e), I but it may be replaced by a more efficient implementation in the future 0 (the interface will remain the same, however). =###non-portable (requires STM) experimentallibraries@haskell.org$  $  $ $non-portable (requires STM) experimentallibraries@haskell.org%  !"#$>                !"#$%&'()*+,-./0  1234567"898:56;<=>.? stm-2.2.0.1Control.Concurrent.STM.TVarControl.Monad.STMControl.Concurrent.STM.TChanControl.Concurrent.STM.TMVarControl.Concurrent.STM.TArrayControl.Sequential.STMControl.Concurrent.STMbase GHC.Conc.IO registerDelay GHC.Conc.Sync writeTVarreadTVar readTVarIO newTVarIOnewTVaralwaysalwaysSucceedscatchSTMthrowSTMorElseretry atomicallySTMTVarTChannewTChan newTChanIO writeTChan readTChandupTChan unGetTChan isEmptyTChanTMVarnewTMVar newTMVarIO newEmptyTMVarnewEmptyTMVarIO takeTMVar tryTakeTMVarputTMVar tryPutTMVar readTMVar swapTMVar isEmptyTMVarTArraycheckunSTMTListTConsTNilTVarListghc-primGHC.BoolTrue Data.MaybeNothingJustFalse array-0.3.0.2Data.Array.BaseMArray