DenDragonB / echobot

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

Обработка ошибок #13

Closed ghost closed 3 years ago

ghost commented 3 years ago

Сейчас в этих местах:

src/Bot/VK.hs|192| fail "Unknown failed response from VK server"
src/Bot/VK.hs|212| fail "No answear from LongPoll server VK"
src/Bot/VK/Types.hs|104| Nothing -> fail "FromJSON VK.Types.Attachment"
src/Bot/VK/Types.hs|138| Just a -> fail $ "FromJSON VK.Types.Attachment: unknown attachment " <> a
src/Bot/VK/Types.hs|207| _           -> fail "Unknown color for button"

вызывается fail (в IO fail = error), т.е. приложение просто падает. Нужно как то обрабатывать все ошибки. Из вариантов: можно использовать ExceptT трансформер, а можно просто ловить их с помощью catch или try. По хорошему можно так же сделать свои типы ошибок, вместо того чтобы кидать обобщенный текст/SomeException. Так же http запросы могут выкинуть эксепшны, это тоже нужно учитывать

DenDragonB commented 3 years ago

Добавил. Первые ошибки - согласен. Последние - это просто переопределение стандартного инстанса FromJSON. Эти ошибки обрабатываются во время декодирования.

ghost commented 3 years ago

Так же http запросы могут выкинуть эксепшны, это тоже нужно учитывать

Из дока:

A note on exceptions: for the most part, all actions that perform I/O should be assumed to throw an HttpException in the event of some problem, and all pure functions will be total. For example, withResponse, httpLbs, and BodyReader can all throw exceptions.

httpBS вызывает httpLbs. Если с сетью будут неполадки, то из-за одного свалившегося запроса может упасть все приложение. Желательно чтобы оно продолжало работать, на случай, если проблемы с сетью могут через какое-то время самоустраниться