Size: a a a

2021 March 24

JS

Jerzy Syrowiecki in ФП
то, что у меня Async, в вашем языке может называться Future или Promise
источник

DK

Daniil Kostin in ФП
Jerzy Syrowiecki
а что значит "откатиться"?
Если хандл ожидания выдает исключение или false - что-то во всей цепочке пошло не так, то есть действие компенсируещее. Допустим йункция пишет что-то в файл и надо вернуть состояние обратно
источник

K

Kir in ФП
Daniil Kostin
Я пытаюсь понять ФП.
Вроде все просто, но как сделать что-то свое не понятно.
Пытаюсь сделать механизм транзакций для функций.
У меня есть некая функция, которая возвращает результат и ждет завершения цепочки. Оборачиваем ее 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
Ниже есть тесты как это работает
Что за язык-то, кстати? Я чот не узнаю. Вроде плюсы, но нет списков захвата у лямбд и есть async/await
источник

DK

Daniil Kostin in ФП
Kir
Что за язык-то, кстати? Я чот не узнаю. Вроде плюсы, но нет списков захвата у лямбд и есть async/await
Dart
источник

DK

Daniil Kostin in ФП
Jerzy Syrowiecki
f :: param -> (result1, Async result2)

f(param) -> Tuple<result1, Async<result2>>
Async как я понимаю это второй отложеный результат
Мне скорее надо обертку над функцией
TransactionTask<ResultType> createTitle(String title) => TransactionTask<ResultType>.create((TransactionTask<ResultType> it) {

 // write title
 it.returnResult(titleData);
 var ok = await it.allCompleted();
 if(!ok) {
   // rollback
   // delete title
 }
}


Но потом какими методами должен обладать TransactionTask, чтобы делать цепочки с вложенными цепочками?
Или надо дополнительную обертку(монаду) над этим типа TransactionTasksCompleter<TransactionTask>?
источник

JS

Jerzy Syrowiecki in ФП
Daniil Kostin
Async как я понимаю это второй отложеный результат
Мне скорее надо обертку над функцией
TransactionTask<ResultType> createTitle(String title) => TransactionTask<ResultType>.create((TransactionTask<ResultType> it) {

 // write title
 it.returnResult(titleData);
 var ok = await it.allCompleted();
 if(!ok) {
   // rollback
   // delete title
 }
}


Но потом какими методами должен обладать TransactionTask, чтобы делать цепочки с вложенными цепочками?
Или надо дополнительную обертку(монаду) над этим типа TransactionTasksCompleter<TransactionTask>?
да, конечно
источник

JS

Jerzy Syrowiecki in ФП
ваш код по завуалированной ссылке довольно большой, я не могу разобраться без знания языка. если выделите небольшой кусочек с основной сутью, над ним можно поработать
источник

DK

Daniil Kostin in ФП
Daniil Kostin
Async как я понимаю это второй отложеный результат
Мне скорее надо обертку над функцией
TransactionTask<ResultType> createTitle(String title) => TransactionTask<ResultType>.create((TransactionTask<ResultType> it) {

 // write title
 it.returnResult(titleData);
 var ok = await it.allCompleted();
 if(!ok) {
   // rollback
   // delete title
 }
}


Но потом какими методами должен обладать TransactionTask, чтобы делать цепочки с вложенными цепочками?
Или надо дополнительную обертку(монаду) над этим типа TransactionTasksCompleter<TransactionTask>?
похоже ли это на ФП или нет?
источник

JS

Jerzy Syrowiecki in ФП
нет
источник

JS

Jerzy Syrowiecki in ФП
это кондовое ООП
источник

JS

Jerzy Syrowiecki in ФП
ФП было бы
return (titleData, await allCompleted())
источник

IZ

Ilia Zviagin in ФП
Daniil Kostin
Я пытаюсь понять ФП.
Вроде все просто, но как сделать что-то свое не понятно.
Пытаюсь сделать механизм транзакций для функций.
У меня есть некая функция, которая возвращает результат и ждет завершения цепочки. Оборачиваем ее 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
Ниже есть тесты как это работает
Причём тут механизм транзакций для функций?
источник

JS

Jerzy Syrowiecki in ФП
Jerzy Syrowiecki
ФП было бы
return (titleData, await allCompleted())
а rollback вообще снаружи, может быть
источник

DK

Daniil Kostin in ФП
Jerzy Syrowiecki
ваш код по завуалированной ссылке довольно большой, я не могу разобраться без знания языка. если выделите небольшой кусочек с основной сутью, над ним можно поработать
основная идея со строки 23 по 49
Но там проблема, что нельзя несколько уровней вложить.
только линейная цепочка. chain().chain()
и нельзя .chain(chain().chain()).chain()

Спасибо, попробую обыграть это
return (titleData, await allCompleted())
источник

IZ

Ilia Zviagin in ФП
Daniil Kostin
как это в ФП превратить?
С чего начать?
А с чего ты вообще взял, что это должно быть FP?
источник

JS

Jerzy Syrowiecki in ФП
функции-процедуры, асинхронщина, неявная передача управления — это всё прекрасно ложится на ФП. по крайней мере, на Хаскель
источник

DK

Daniil Kostin in ФП
Ilia Zviagin
А с чего ты вообще взял, что это должно быть FP?
хочу разобраться в ФП и делать красивые цепочные преобразования не зависимые и контекста данных. На сколько я знаю в ФП легко поменять List на IdMonad и легко протестировать. Наверно, не лучший пример.
источник

IZ

Ilia Zviagin in ФП
Daniil Kostin
хочу разобраться в ФП и делать красивые цепочные преобразования не зависимые и контекста данных. На сколько я знаю в ФП легко поменять List на IdMonad и легко протестировать. Наверно, не лучший пример.
Почему ты начал с транзакций для функций?
источник

DK

Daniil Kostin in ФП
Ilia Zviagin
Почему ты начал с транзакций для функций?
Потому что мне это сейчас надо и не знаю как это сделать иначе. На ООП это кажется крайне сложным.
источник

JS

Jerzy Syrowiecki in ФП
Daniil Kostin
хочу разобраться в ФП и делать красивые цепочные преобразования не зависимые и контекста данных. На сколько я знаю в ФП легко поменять List на IdMonad и легко протестировать. Наверно, не лучший пример.
а, если такая цель, то лучше начать с простых вещей, а не с таких сразу монстров
источник