问题
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?
回答1:
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.)
来源:https://stackoverflow.com/questions/10101044/haskell-tvar-orelse