[Haskell-cafe] Stack overflow

Tim Docker twd2 at dockerz.net
Wed May 27 23:08:32 EDT 2009


> Thanks for the tip, although it seems tricky to get it right. I wonder
> why there is no strict version of atomicModifyIORef?
> Dually there might be a strict version of IORef datatype.

Alternatively, you could use STM, where you can write your own atomic
update function, which has the strictness you need (untested):

import Control.Concurrent.STM

strictUpdate :: (a->a) -> TVar a -> STM ()
strictUpdate f v = do
    x <- readTVar v
    let x1 = f x
    x1 `seq` writeTVar v x1

g :: (Int->Int) -> TVar Int -> IO ()
g f v = atomically (strictUpdate f v)


Tim



More information about the Haskell-Cafe mailing list