<div dir="ltr">In the stm package, the docs for atomically read:<br><br><div>> 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.)</div><div><br></div><div>This doesn't seem to be true. The following program runs fine:</div><div><br></div><div><div> import Control.Monad.STM</div><div> import Control.Concurrent.STM.TVar</div><div> import System.IO.Unsafe</div><div> </div><div> main :: IO ()</div><div> main = do</div><div> v <- atomically $ newTVar (7 :: Int)</div><div> print $ unsafePerformIO $ atomically $ do</div><div> readTVar v</div><div><br></div><div>I suspect that the runtime only gives you an error if you actually create a nested transaction. Is my understanding correct?</div><div><br><div class="gmail_signature">-Andrew Thaddeus Martin</div>
</div></div></div>