Compare-and-swap semantics in GHC