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