
The code that I was profiling that exhibited this behavior basically looked like: do t <- read a file r <- create an io ref mapM_ (\c -> do ... modifyIORef r <E> ) t but when i replace: modifyIORef r <E> with v <- readIORef r writeIORef r $! <E> I no longer run into this heap problem and the program runs much more quickly. even if I use (modifyIORef f (\x -> id $! <E> x)), which I thought would fix it, there is still a heap problem. looking in the ghc sources, modifyIORef is defined as: modifyIORef ref f = writeIORef ref . f =<< readIORef ref so i don't understand what's going on here. -- Hal Daume III | hdaume@isi.edu "Arrest this man, he talks in maths." | www.isi.edu/~hdaume On Fri, 18 Apr 2003, Hal Daume III wrote:
My program which should use constant stack/heap is using a ton of heap. I profiled with -hd and the guy that's eating all the heap is BLACKHOLE. What does this mean?
-- Hal Daume III | hdaume@isi.edu "Arrest this man, he talks in maths." | www.isi.edu/~hdaume