Я борюсь с группированием последовательностей событий в одну атомную транзакцию.Создание последовательности событий атома в кислотном состоянии
Рассмотрите Map
, хранящийся в кислотном состоянии, и представьте, что вы хотите реализовать Data.Map.alter
. Функция, которая принимает значение-значение и возвращает его, не может быть сохранена в журнале изменений, поэтому невозможно определить кислотное событие Alter
. Однако, если я напишу функцию, которая вызывает query st Lookup ...
, чтобы найти старое значение, а затем update st Insert ...
, чтобы написать новый (или удалить старый), есть условие гонки, и я могу уничтожить информацию из обновлений, которые произошли между ними.
В https://github.com/acid-state/acid-state/pull/48, я использовал дополнительный MVar
для ручного блокирования, но должно быть лучшее решение.
Любые идеи?