Является ли "else" частью orElse, когда транзакция повторяется из-за другой транзакции, записывающей в TVar, которую она прочитала, или только когда retry явно называется?
Haskell: TVar: orElse
Ответ 1
Если у вас
orElse a b
то b запускается, только если retry явно указано в a. В противном случае orElse по существу станет недетерминированным. (Повторение транзакций, выполняемых STM, является прозрачным и не должно влиять на результат любых вычислений.)