Krzysztof Skrzętnicki wrote: > The code for modifying the counter: > (\ msg -> atomicModifyIORef ioref (\ cnt -> (cntMsg cnt msg,())))
atomicModifyIORef does not force the new value of the IORef. If the previous contents of the IORef is x, the new contents will be a thunk, (\ cnt -> (cntMsg cnt msg,())) x You can try forcing the new value, say by adding >> readIORef ioref >>= (return $!) after the atomicModifyIORef. > The datatype itself is strict. So where is the thunk actually accumulating? In the IORef. HTH, Bertram _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe