Portability | non-portable |
---|
The launchMissiles
action, as mentioned in:
- Beautiful concurrency, by Simon Peyton Jones, to appear in "Beautiful code", ed Greg Wilson, O'Reilly 2007. http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/index.htm#beautiful
- launchMissiles :: IO ()
- withMissilesDo :: IO a -> IO a
- launchMissilesSTM :: STM ()
Documentation
Cause serious international side effects.
Launching missiles in the STM
monad
withMissilesDo :: IO a -> IO aSource
Perform initialization needed to launch missiles in the STM
monad.
launchMissilesSTM :: STM ()Source
Launch missiles within an STM
computation. Even if the memory
transaction is retried, only one salvo of missiles will be launched.
Example:
import Acme.Missiles import Control.Concurrent import Control.Concurrent.STM main :: IO () main = withMissilesDo $ do xv <- atomically $ newTVar (2 :: Int) yv <- atomically $ newTVar (1 :: Int) atomically $ do x <- readTVar xv y <- readTVar yv if x > y then launchMissilesSTM else return () threadDelay 100000