Is the "else" part of orElse
called when a transaction is retried due to another transaction writing to a TVar
it had read, or only when retry
is explicitly called?
If you have
orElse a b
then b
is only run if retry
is called explicitly in a
. Otherwise orElse
would essentially become nondeterministic. (The rerunning of transactions that is done by the STM runtime is transparent and should not effect the outcome of any computation.)