АГ
Вроде все просто, но как сделать что-то свое не понятно.
Пытаюсь сделать механизм транзакций для функций.
У меня есть некая функция, которая возвращает результат и ждет завершения цепочки. Оборачиваем ее TransactionTask<ResultType>(someFn(TransactionTask<ResultType> it)) для ее запуска нужен общий completer.
Transaction инициализирует completer, принимает цепочку TransactionTask и по endTx() запускает стек.
Подскажите, с чего начать?
Вроде похоже на FreeMonad, но не совсем. Если често я никак не могу понять как из ФП объектов Монада, Функтор собрать то, что мне надо.
Что такое контекст тоже не совсем понятно. Iterable<A> Iterable - контекст, А конкретный тип объекта в этом контексте?
Есть код, но там пока одна монолитная сущность Transaction, она сама как TransactionTask. Но нужна еще вложенность. Поэтому планирую, что репозиторий будет оборачивать исполнени каждого своего метода в TransactionTask. TransactionTask<PostData> create(String post) => TransactionTask.pure((it) ...);
pastebin.pl/view/f68173d4Ниже есть тесты как это работает
https://github.com/graninas/cpp_stm_free
(Есть еще версия для Haskell)



