2012-04-11 1 views
11

Est-ce que la partie "else" de orElse est appelée lorsqu'une transaction est relancée à cause d'une autre transaction qui écrit dans un TVar qu'elle a lu, ou seulement lorsque retry est explicitement appelée?Haskell: TVar: orElse

Répondre

10

Si vous avez

OrElse a b

alors b est exécuté que si retry est appelé explicitement dans a. Sinon, orElse deviendrait essentiellement non déterministe. (La réexécution des transactions effectuée par le moteur d'exécution STM est transparente et ne devrait affecter le résultat d'aucun calcul.)