https://github.com/Cauterization/EchoBot/blob/67874ecbbed1b9d47ab20c80c5aeee5d70206981/src/Extended/HTTP.hs#L30-L38 Во-первых, OverlappableInstances это deprecated расширение, его не надо использовать везде, где возможно не использовать. Здесь не должно быть особых сложностей обойтись без оверлаппинга - через default метод класса, например, либо через DerivingVia. Во-вторых, нужен ли такой класс, у которого на весь проект всего один возможный инстанс? Можно же просто как функцию оформить. То же самое касается модуля Bot/IO.hs
https://github.com/Cauterization/EchoBot/blob/67874ecbbed1b9d47ab20c80c5aeee5d70206981/src/Bot/Bot.hs#L27-L51 Вроде как мы пытаемся тут абстрагироваться от деталей реализации, но внезапно в качестве основного носителя данных выступает сгенерированный заранее url, да ещё и в виде простого текста. А в случае с консольным ботом это вообще оказывается враньем, ведь url там никакого нет, но переменная тем не менее называется url)) В общем выглядит не очень элегантно, нет ли способа это пофиксить?
hlint выдает пару советов про unused pragma, убери их.
Bot/IO.hs