Inaccurate docs for atomically

Andrew Martin andrew.thaddeus at gmail.com
Sun Nov 12 16:17:40 UTC 2017


In the stm package, the docs for atomically read:

> You cannot use 'atomically' inside an 'unsafePerformIO' or
'unsafeInterleaveIO'. Any attempt to do so will result in a runtime error.
 (Reason: allowing this would effectively allow a transaction inside a
transaction, depending on exactly when the thunk is evaluated.)

This doesn't seem to be true. The following program runs fine:

    import Control.Monad.STM
    import Control.Concurrent.STM.TVar
    import System.IO.Unsafe

    main :: IO ()
    main = do
      v <- atomically $ newTVar (7 :: Int)
      print $ unsafePerformIO $ atomically $ do
        readTVar v

I suspect that the runtime only gives you an error if you actually create a
nested transaction. Is my understanding correct?

-Andrew Thaddeus Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20171112/239eb001/attachment.html>


More information about the Libraries mailing list