AKitavtsev / telegram-vk-bot

BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

newDict в IO #5

Closed olegromashin closed 3 years ago

olegromashin commented 3 years ago

Почему newDict в монаде IO?

AKitavtsev commented 3 years ago

Добрый вечер, Роман. Это вопрос или рекомендации к исправлению?

AKitavtsev commented 3 years ago

Если это вопрос, попытаюсь ответить. У меня значение значение функции NewDict завернуто в монаду IO для того, чтобы иметь возможность продолжить монадические вычисления, передав значение с помощью функции >>= в следующую функцию - loopBoot. В рекомендованной статье по Service Pattern (https://www.schoolofhaskell.com/user/meiersi/the-service-pattern) рекомендуется помещать в Handle функции именно с таким типом значения. Но, это я так понял. Поправь меня, пожалуйста, если я чего-то не понял.

olegromashin commented 3 years ago

Это вопрос или рекомендации к исправлению?

И то, и другое :) Функция не выполняет никаких IO действий, поэтому нет смысла цеплять к ней IO. Ты же, например, не будешь оборачивайть что-то в Maybe без причины. Продолжить цепочку вычислений можно и без IO в этом действии, например, так:


do
  res <- action1 >>= action2 >>= action3
  let x = 42
  action4 x res >>= action5
AKitavtsev commented 3 years ago

Спасибо, я понял. Если ты считаешь, что так, как у меня, делать нельзя, лучше реализовать все в do-нотации, пренебречь при этом советами упомянутой выше статьи, верни, пожалуйста это issue в статус open, я исправлю

olegromashin commented 3 years ago

Если ты считаешь, что так, как у меня, делать нельзя, лучше реализовать все в do-нотации, пренебречь при этом советами упомянутой выше статьи

Я думаю, ты не совсем понимаешь, как это работает. Монадические вычисления не прерываются, если ты переписываешь выражение в do-нотацию.

верни, пожалуйста это issue в статус open, я исправлю

У меня нет прав, верни, пожалуйста, сам :)

AKitavtsev commented 3 years ago

Да, нет, это как раз понимаю, просто казалось, что так симпатичнее Понял, исправлю

AKitavtsev commented 3 years ago

Исправил