Haskell: TVar: orElse

является частью "else"orElse вызывается, когда транзакция повторяется из-за другой транзакции, записанной в TVar он прочитал, или только когда retry явно вызывают?

1 ответов


если у вас

если б

затем b работает только если retry вызывается явно в a. В противном случае orElse по существу станет недетерминированным. (Повторный запуск транзакций, выполняемый средой выполнения STM, прозрачен и не должен влиять на результат каких-либо вычислений.)