失敗する可能性のある操作を作成したいのですが、ロールバックする方法があります。
たとえば、ホテルの部屋を予約するための外部呼び出し、およびクレジットカードに請求するための外部呼び出し。部屋が残っていない、クレジットカードが無効であるなど、これらの通話は両方とも失敗する可能性があります。どちらにもロールバックする方法があります。ホテルの部屋をキャンセルし、クレジット料金をキャンセルします。
- このタイプの(実際ではない)アトミックの名前はありますか?haskellトランザクションを検索するたびに、が表示されます
STM
。 - 抽象化、それらを構成する方法、またはhaskellや他の言語のライブラリはありますか?
Atomic T
これらの操作を追跡し、例外がある場合はロールバックするモナドを作成できると思います。
編集:
これらの操作は操作である可能性がありIO
ます。2つの答えが示唆するように、操作がメモリ操作のみである場合、STMで十分です。
たとえば、ホテルの予約はHTTPリクエストを介して行われます。ソケット通信を介したレコードの挿入などのデータベース操作。
現実の世界では、不可逆的な操作の場合、操作が行われる前に猶予期間があります。たとえば、クレジットカードの支払いやホテルの予約は、1日の終わりに決済される場合があるため、それまでにキャンセルしても問題ありません。