Wenn ich in einem STM bin, dessen Transaktion fehlschlägt, und ich es als Teil des normalen Kontrollflusses versuche (keine STM-Kollision etc ..), möchte ich jemanden außerhalb einer Möglichkeit angeben, korrigierende Maßnahmen zu ergreifen .STM und ausgehende IO
Wenn es rein 'ausgehend' ist, kann mein STM immer noch rein wiedergegeben werden.
Wie kann ich durchführen ausgehend IO von einem STM-Versuch?
Hat jemand dies festgestellt? Wie böse ist das?
Ich führe STM auf meinem Server durch, und ich möchte dem Benutzer etwas Text anzeigen (eine Nachricht an seine UI senden), um zu erfahren, warum die Transaktion fehlgeschlagen ist, so dass er die Formularübergabe behebt und in die schreibt TVar wieder. – nicolas
@nicolas Verwenden Sie ['orElse'] (https://hackage.haskell.org/package/stm-2.4.4.1/docs/Control-Monad-STM.html#v:orElse) und geben Sie einen Erfolgs-/Fehlercode zurück. 'atomically $ (myPossiblyFailingSTMAction >> gibt True zurück)' orElse' (return False) ''. Wenn Sie "False" erhalten, wissen Sie, dass "myPossiblyFailingSTMAction" fehlgeschlagen ist. Viel sauberer als 'unsafeIOToSTM' –
@nicolas In diesem Fall sollte man die Transaktion erfolgreich machen, aber ein" Misserfolg "Ergebnis zurückgeben, wie Benjamin Hodgson vorschlägt. – chi