Denis
Кидай
Doge
Кидай
Так, у меня новая задачка для знатоков.
Есть такой вот код с кучей associated типов, проблема в том, что хочется как-то убедить раст, что non_empty_somethings_ids, никак не зависит от &mut StateType по времени жизни в данном примере.
Вот пример: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=386226d4945549bf2ef7d8abe5ae219f
Обходные пути понятны:
1. Возвращать вместо итератора сразу Vec<SomethingId>
2. Чуть поменять структуру кода и делать вот так: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=3f03f5b4cc24b1fbfe0e913ca857bf5d
3. Попробовать взять GAT, но они не стабильны пока: https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=933998b431ceb9ffc6c21c1233464483
Хочется максимально сохранить первоначальный вариант и использовать именно associated типы.
Doge
В итоге я остановился на первом из обходных вариантов, но в реальном коде чуть хуже смотрится
Doge
Ну и да в реальности логика там чуть сложнее, внутри if хитрый кусок с выбором того, что и как именно пойдет в хэшсет
Anatoly
ок. я хочу попробовать заново резалт-монаду
Anatoly
есть три кейса:
1. Ok (access_token, refresh_token)
2. Unauthorized
3. HttpError (status_code, reason_phrase)
Anatoly
как благородные доны предлагают это в C# изобразить?
Ilya
TripleResult<Z, I, O>
Denis
Ilya
(извините, у меня несмешные шутки)
Hog
Ilya
Я специально :)
Ilya
А как вот ту штуку с тройным резалтом сделать-то? DU через абстрактные классы и лямбды передавать, которые будут определять, каким образом надо респонс распарсить и вернуть?
Anatoly
Anatoly
корявенький, но какой есть
Anatoly
Ilya
Ну паттерн матчинг уже на стороне обработчика типизированного ответа будет, как я понимаю. Но вообще, я пытаюсь перевести F# в C#, а это не очень хорошо работает, наверное.
Mikhαil
Да не, в 8 шарпе он помощнее же
Mikhαil
Гораздо
Ilya
Да там только синтаксис с => завезли, вроде бы?
Anatoly
Mikhαil
Mikhαil
В седьмом такого не было
Anatoly
я пока хочу посмотреть что получится.
Ilya
Да и на монаду это не похоже, вроде бы? Хотя пофиг, конечно.
TOV_MULTIMASSO
Сделать как Either
TOV_MULTIMASSO
Ilya
Туплы?
TOV_MULTIMASSO
TOV_MULTIMASSO
Что - туплы?
Anatoly
Mikhαil
Я делал резалт со значением в поле Data или ошибкой в поле Error где Error это бизнес ошибка в виде du
И собирал паттерн матчингом
Но там два уровня матчинга получились
TOV_MULTIMASSO
А, результата операции же не нет
Ilya
Ой, пофиг.
Mikhαil
TOV_MULTIMASSO
Unauthorised/HttpError - и то и другое является ошибками
Ilya
А три кейса, как я понимаю, потому что первые 2 -- это типа бизнес-штуки, а 3 уже что-то непонятное.
Anatoly
Anatoly
401 - у тебя токен говно
Anatoly
всё остальное - не пойми что, сеть плохая, сервер умер, етс, можно ретрайнуть
Ilya
Ну это всё равно можно неплохо записать, типа
match response with
Ok ->
Error(code, reason) when code = 401 ->
_ ->
Mikhαil
А чо мешает сделать du из класса ок, анавторайзд и статускод?
Mikhαil
И в ок заворачивать данные если надо
Ilya
На сишарпе это не очень, но такой вариант я с самого начала предложил)
Mikhαil
Если очень хочется разделить на три типа
TOV_MULTIMASSO
Тип-то один
Ilya
Хотя райдер тот же справляется с генерацией вариантов во время паттер матчинга.
Igor
нафига 401 отделять от остальных кодов?
Mikhαil
Тип-то один
Ещё раз - почему не сделать базовый тип резалт и от него отнаследовать три кейса которые описал Анатолий и обрабатывать паттерн мэтчингом. Не оч понимаю
Mark
как вы справляетесь с желанием отрефакторить свои старые петы?
Ayrat
Mikhαil
Mikhαil
Ну и у меня больше про бизнес ошибки
Mikhαil
В командах и квери
Ilya
Можно вообще вокруг реквеста накрутить вариантов на сколько угодно вариантов. Хотя на каждый код ответа.
Anatoly
Nuxs🏴☠️
Зачем монады в мультипарадигменном программировании?
Anatoly
Ayrat
Anatoly
Ilya
Паттерн матчинг?🤔
Ayrat
монада это ж моноид в категории блаблабла
а моноид подразумевает бинарные замкнутые операции над типом!
Anatoly
Nuxs🏴☠️
Anatoly
хочу прикрутить DU для Result
Ayrat
ну вот если ты сможешь придумать
pure: T -> Result
flatmap: Result.Ok -> Result
то у тебя монада
Ayrat
(ну почти, там ещё пара законов)
Anatoly
Ayrat
Shub
Mikhαil