Clean up atomicModifyIORef stuff
Summary
Back when I replaced the primop supporting atomicModifyIORef
, the decision was made (I think in consultation with @bgamari, but I'm not sure) to use atomicModifyIORef2
rather than atomicModifyIORef2Lazy
to implement atomicModifyIORef
. I believed then and I believe now that that was a good decision, but it was a semantic change and the documentation was never updated to reflect it. There's also a useless and confusing lazy pattern match in the definition of atomicModifyIORef
that should be removed. And there's a curious duplication between atomicModifyIORef
and atomicModifyIORefP
Proposed improvements or changes
Change the documentation of atomicModifyIORef
to reflect this change, and document when it occurred. In particular, the example it claims will leak memory actually won't anymore. Explain that the pair is forced, but not its components.
Move the implementation of atomicModifyIORef
into GHC.IORef
and delete atomicModifyIORefP
.
Remove the (useless) lazy pattern match in atomicModifyIORef
. It's useless because atomicModifyIORef2
already forces that pair.
Environment
- GHC version used (if appropriate):