Я хочу составить операции, которые могут дать сбой, но есть способ отката.
Например, -внешний вызов для бронирования номера в отеле и внешний вызов для снятия средств с кредитной карты. Оба эти вызова могут завершиться неудачно, например, если номеров не осталось, недействительная кредитная карта. У обоих есть способы отката -отмены гостиничного номера, отмены списания кредита.
STM
.Мне кажется, вы могли бы написать монаду Atomic T
, которая будет отслеживать эти операции и откатывать их в случае исключения.
Изменить:
Эти операции могут быть IO
операциями. Если бы операции были только операциями с памятью, как предполагают два ответа, STM было бы достаточно.
Например, бронирование отелей будет осуществляться через HTTP-запросы. Операции с базой данных, такие как вставка записей через сокеты.
В реальном мире для необратимых операций существует льготный период, прежде чем операция будет выполнена -, например.платежи по кредитным картам и бронирование отелей могут быть произведены в конце дня, поэтому можно отменить бронирование до этого времени.