In most STM models this is a busy-wait implemented with STM? Only Haskell blocks on `retry`