pf03 / newBot

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

Использование библиотечных функций #14

Open catdarick opened 3 years ago

catdarick commented 3 years ago

https://github.com/pf03/newBot/blob/5c8e387215807a19862848cc28f94b6752ddf59d/src/Messenger/Bot/VK/Instances.hs#L70 Лучше использовать библиотечную функцию parseRequest для этого. Метод можно указать вручную:

initReq <- parseRequest "http://www.example.com/path"
let req = initReq
            { method = "POST"
            }
pf03 commented 3 years ago

Но ведь велосипедить на учебном проекте никто не запрещал. И на данном этапе нам нужен не Request, а только Host, Path. Request формируется уже потом в модуле Logic.Request с учетом всех параметров, метода, порта и т.д. Единственный косяк, который я здесь вижу, это то что parseServer должна выполняться единожды, а не при каждом запросе, но это легкая функция и на производительность нисколько не влияет

catdarick commented 3 years ago

Вызов этой функции как раз объединит работу двух функций: parseServer и buildRequest, которые вызываются последовательно. Велосипеды - зачастую источники ошибок. В документации ВК я не нашёл строгого описания формата server url, а эта функция очень строгая - исключительно строки в формате "https://lp.vk.com/wh777777777", но путь ведь может отличаться. Может быть, например "https://lp.vk.com/wh777777777/some/thing" - в таком случае она выдаст ошибку

pf03 commented 3 years ago

Исправил, если это так принципиально

KateBushueva commented 3 years ago

тут еще момент в том, что поведение библиотечных функций очевидно и понятно, а в самописных функциях приходится разбираться и тщательно проверять на наличие возможных ошибок.

KateBushueva commented 3 years ago

проверь модуль Common.Functions : половина функций из него нигде не вызывается, еще половина имеет библиотечные аналоги. как по мне

for :: Monad m => m a -> (a -> b) -> m b
for = flip fmap

в таких случая лучше оставить flip fmap , если оно необходимо. не надо делать в отдельном модуле функцию for (в крайнем случае вынести ее в where в том месте, где она вызывается). Потому что поведение flip fmap очеидно, а поведение for надо еще найти

pf03 commented 3 years ago

Исправил.