<div dir="auto">In the process of replacing atomicModifyMutVar#, I noticed that atomicModifyIORef' is just a little bit lazy:<div dir="auto"><br></div><div dir="auto">atomicModifyIORef' ref (\x -> (x + 1, undefined))</div><div dir="auto"><br></div><div dir="auto">will increment the reference and then throw an exception in the calling thread. We could sometimes avoid creating thunks by changing this, so the above would install undefined in the IORef as well. For example, suppose I write</div><div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif">atomicModifyIORef' ref (\x -> (3, x + 5))</span><br></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">This will end up producing a thunk for the second component. That could be avoided using something like</span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">atomicModifyIORef' ref (\ !x -> (3, x + 5))</span><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><font face="sans-serif">but it seems a little surprising to have to do that in a function that focuses on being strict.</font></div><div dir="auto"><font face="sans-serif"><br></font></div><div dir="auto"><font face="sans-serif">I don't really care too much one way or the other, but I figured I should point this out and see what you all think.</font></div></div>