KateBu / bot-1.3

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

Байндеры там, где лучше было бы без них #9

Closed DonDokidon closed 3 years ago

DonDokidon commented 3 years ago

https://github.com/KateBu/bot-1.3/blob/04be57027cfa47804428e1bd90c163b4fcb8b70b/src/Environment/InitEnvironment.hs#L37

Имхо ты абузишь байндеры. Код должен читаться сверху вниз, одна строчка на одно действие. А ты его байндерами еще и вправо увозишь. Байндеры стоит применять, когда ты байндишь что-то совсем простое ( >>= return . Just ), или когда из кучки "нейтральных" функций нужно сделать какую-то "осмысленную", которой можешь дать название. И во втором случае ты с этим названием выносишь эту функцию в where

KateBu commented 3 years ago

в данном конкретном случае там все в do-нотации, проще наверно без where сделать botSettings <- setBotTypeSettings botT vkGroup vkTok tTok initEnvironment msg rep prior botSettings

в целом понятна мысль, хотя байнды мне нравились)

DonDokidon commented 3 years ago

Тут, наверное, спорный момент. Просто я считаю, что по левую сторону do блока должны идти все важные для понимания последовательности действий функции. И, на мой взгляд, то что мы инициализируем environment - довольно важная штука в последовательности наших действий. А вот, например, штуки вроде этого maybe -> a <- mbGetRequiredThing >>= maybe throwError pure нам в этой последовательности не особо важны, их мы при помощи байндера и выносим туда, где они место не занимают. P.S. ну я и не говорил что-то здесь в where выносить, я сказал, что байндер можно применять в таких вот функциях ( getRepeatCount a = maybeRead a >>= return . max 1 >>= return . min 5 ), но их все равно нужно выносить в where :)

KateBu commented 3 years ago

мне кажется, в таком случае байнды уместны:

telByteStringToPureMessageList env bytestring =
  decodeByteString env bytestring >>= telUpdatesToPureMessageList env

тут последовательность функций задается, или тоже в where выносить?

DonDokidon commented 3 years ago

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

KateBu commented 3 years ago

ок, убрала байндеры кроме совсем элементарных случаев