🇺🇦 Дмитрий
вот эту проблему я решил |> Result.MapError..
AsyncResult.MapError
и красивый код получил кучу копипаста после каждого вызова с let!
🇺🇦 Дмитрий
я так понимаю чтоб вернуть красивый код, нужно в этот билдер сделать ещё bind с моим MapError?
Ayrat
Maksym
🇺🇦 Дмитрий
я теперь понял почему когда ты мне писал пример с AsyncResult ты делал с Result<'a, exn>
Maksym
Как по мне пайплайн более репрезентабельно выглядит, ну и разбираться в нем быстрее чем просто писать как computer expression
🇺🇦 Дмитрий
Maksym
Вижу что это силеним, думаю что здесь пайплайн не совсем нужен, так как это просто тестирование
🇺🇦 Дмитрий
была рпроблема примерного рода
🇺🇦 Дмитрий
step3 принимает значение и возвращает Async<Result<»
🇺🇦 Дмитрий
result.bind ожидает биндер с значения в Result
Maksym
AsyncResult.bind ?
Ayrat
🇺🇦 Дмитрий
🇺🇦 Дмитрий
я написал что то такого тогда
🇺🇦 Дмитрий
Maksym
Result.bindAsync не использовал?
🇺🇦 Дмитрий
не знал про него
Maksym
https://github.com/Saphirox/issue-classificator/blob/master/November.Api/Result.fs
Maksym
bindAsync
Maksym
Тут надо самом дописывать такие функции
🇺🇦 Дмитрий
а как бороться с биндами в биндах?
🇺🇦 Дмитрий
когда пайплайн ещё длинее
🇺🇦 Дмитрий
или когда тип след функции наоборот становится проще приходится map юзать
🇺🇦 Дмитрий
ну и читаешь этот код
там map
там bind
там asyncBind
🇺🇦 Дмитрий
сидишь подбираешь чтоб туда вставить
🇺🇦 Дмитрий
или нет такой проблемы?
🇺🇦 Дмитрий
do! step1
do! step2
do! step3
выглядит проще
Maksym
Maksym
do! step1 |> Result.tap step2 |> Async.switch |> AsyncResult.tap step3
🇺🇦 Дмитрий
папйлайн рушится как только нужно что то с другого шага
🇺🇦 Дмитрий
сорри за скрин
🇺🇦 Дмитрий
Maksym
Ну, если не использовать Result, Да, так тоже работает
🇺🇦 Дмитрий
ну я про то что 3 шагу, нужен результат первого
Maksym
Maksym
tap возвращает результат предыдущей функции при этом выполняет указаную функцию
Maksym
Вот пример с Result<>
Maksym
let tap (f: 'a -> 'b) (x: Result<'a, 'c>): Result<'a, 'c> =
match x with
| Ok value ->
f value |> ignore
x
| _ -> x
🇺🇦 Дмитрий
tap вычисляет что то в молоко и возвращает переменную с прошлого шага?
Maksym
Maksym
🇺🇦 Дмитрий
ну в моей примере нужно результат вычисления в след шаг дать, и пред значение донести до 3 шага, напрашиваются туплы
Maksym
🇺🇦 Дмитрий
https://gist.github.com/BashkaMen/b2a01ec029ed69f2844de8af0afff598
🇺🇦 Дмитрий
🇺🇦 Дмитрий
тут я мапил получилось ли достать из бд
потом добавлял item
потом считал сумму
потом платил используя сумму с прошлого шага и стейт из позапрошлого
Maksym
Ну, так тоже работает, но я думаю можно сделать лучше
🇺🇦 Дмитрий
я уверен что так как я там баловался ни кто не делает))
🇺🇦 Дмитрий
что есть варианты хорошие
Anatoly
Anatoly
Anatoly
ну, т.е. у меня есть доступ к их хер знает какой линии поддержки, не чатботу. и они не смогли.
🇺🇦 Дмитрий
@Saphirox а подскажи ещё про замыкание
🇺🇦 Дмитрий
🇺🇦 Дмитрий
или это? считается ли это читингом?
🇺🇦 Дмитрий
мне второй вариант больше нравится, так как я не менял функции специально под пайплайн (возвращал стейт)
Maksym
или это? считается ли это читингом?
Второй пример лучше, так всегда делаю, сначала думаю какие шаги пайплайна буду делать, потом пишу его без имплементации функций но дефайню входные и выходные данные, вверху делаю имплементацию
Maksym
Maksym
Ayrat
серьёзный код серьёзных индусов
AlexB
ты попробуй сначала =)
Пробовал. Но не для аггрегации, правда.
Искал медленные реквесты. Очень помогло, кстати. Был неприятный прикол, что при поднятии нового контейнера существующие начинали тупить.
Maksym
Roman
Тут вбрасывали код со всякими |> AsyncChoice.map3 и трехэтажными лямбдами. Код, который в СЕ читался бы за 3 секунды в пайплайне нужно вдуплять 5 минут. Нахуя?
Maksym
Vagif
Anatoly
Maksym
Anatoly
мы её сохраняем вот так: NewRelic.Api.Agent.NewRelic.RecordMetric($"Custom/{name}", value);
Maksym
А не усложнить
🇺🇦 Дмитрий
и когда там куча map, bind, tap, maperror, pure не очень получается сразу понять
🇺🇦 Дмитрий
я открыл тот код с корзиной который я выше скинул, я не сразу понял что я там делаю (возможно из-за отсутвия насмотренности), но я посмотрел на вариант с CE и мне потом стало понятно что в том пайплайне
Maksym
Ну спустя года на прод проекте на фшарпе я привык, иногда да, пайплайны не подходят особенно если нужно комбайнить результаты многих отправок сообщений через кафку
Ayrat
Ахах
больше ада. Заметь что ИДЕЯ-то всё показывает долбоёбам.