
On Mon, Dec 05, 2005 at 09:19:05AM -0000, Simon Peyton-Jones wrote:
Can you provide a small test case that demonstrates the crash?
Here it is: import Control.Concurrent.STM import System.IO.Unsafe (unsafePerformIO) {-# NOINLINE var #-} var :: TVar () var = unsafePerformIO (atomically (newTVar ())) main = atomically (readTVar var) I remember someone else posted a crash example with unsafeInterleaveIO.
I think it's pretty unlikely that we'll support nested atomically (via unsafePerformIO) anytime soon.
OK, it's fine with me. But maybe it would be easy to raise an exception in such scenario?
UnsafePerformIO is, well, unsafe.
And so is unsafeInterleaveIO.
I think you are really asking for some way to create top-level transactional variables?
Yes. Perhaps it would be easier to do it cleanly than arbitrary top-level IO bindings? In fact, almost every time I wanted a top-level unpure thingy, it was a concurrency variable. Best regards Tomasz -- I am searching for a programmer who is good at least in some of [Haskell, ML, C++, Linux, FreeBSD, math] for work in Warsaw, Poland