Leonid 🦇
В этом чате геополипы завелись
Aliester
баним всех
Aliester
*меня в первую очередь*
A64m
чего вдруг огромный-то?
Leonid 🦇
Leonid 🦇
Потом х.з. в какой модуль этот АДТ сунуть еще
Ю ли я? 🤔
Maybe Either Either как-то правда попахивает
Leonid 🦇
а вообще Джаспер всё верно говорит, рекомендую
https://www.youtube.com/watch?v=-X1vrxQUETM
https://github.com/jaspervdj/talks/blob/master/2018-haskellerz-getting-things-done/slides.md
Leonid 🦇
ну вот я тут тоже не уверен.
Leonid 🦇
Prelude.Extended хм
Alexander
Extended это как Utils..
Alexander
или Missing которое немного smells
Зигохистоморфный
лучше Extra
кана
хорошо в жиес, называешь целый модуль по имени целой одной функции в нем на две строчки, в npm выкладываешь
Alexander
Data.ByteString.Utils ?
Alexander
Acme.Data.ByteString ?
Leonid 🦇
ну ты посмотри на слайд то
кана
ну как я понял, предполагался общий Utils как свалка для всего
Leonid 🦇
import Data.ByteString.Utils as BS
import Data.ByteString as BS
vs
import Data.ByteString.Extended as BS
кана
а тут предлагается разделение на модули, с добавлением Extra
поэтому мы можем заимпортить старый модуль
то есть посыл не в экспорте старого модуля + extended, а в группировке своих функций по модулям (а уже это дает возможность экспортить старый модуль)
Leonid 🦇
спецом для местных яваскриптеров
Leonid 🦇
> I think having a .Types module is a Haskell antipattern.
TRIGGERED
Aleksei (astynax)
Кану то ты не напугаешь зигой
Aleksei (astynax)
Так что это какая-то hyperamid
A64m
тормозной в смысле компиляции
Leonid 🦇
Вообще хороший доклад
Ю ли я? 🤔
A64m
но последние пару лет, похоже, это уже основные обсуждаемые тормоза
Alexander
A64m
но пирамида не совсем правильная все же.
Alexander
Alexander
в чем разница то (но яобычно не делаю utils)
Alexander
тем более это не гарантирует того, что не будет Externded1 и Extended2
A64m
ну, если сильно постраться, то можно обойтись для написания программ какими-то кондовыми библиотеками, для которых каких-то адвансед знаний хаскеля не надо
A64m
но популярные библиотеки часто не такие
Alexander
про Types там про то, что только типы причем все подряд
Alexander
это действительно убого
Alexander
ну Utils где все подряд это точно антипаттерн
Alexander
но такого даже в MissingH нету
Leonid 🦇
Но он предлагает Internal
Alexander
я так понял он против Types где только типы
Alexander
т.к. там нужны и инстансы а для них функции всякие
Alexander
если у тебя есть Transport types то такое взлетит
Alexander
там обычно инстансы только автогенеренные и никаких метород
Alexander
методов
Leonid 🦇
он за разделение Types на проблемные области
Alexander
не только
Alexander
опять же Types на все подряд это неясно кому в голову прийти может
Alexander
strawman какой-то
A64m
это вполне может быть при "органическом" развитии какого-то говнокода, который был небольшим, а потм сильно вырос
Leonid 🦇
Ну у меня есть
Huita.API.Types.Core -- AssetId,ProjectIId, ... FileName
Huita.API.Types.Project -- Project, ProjectExpanded
Huita.API.Project -- servant
A64m
ну и вот вчера же был модуль со всеми рекордами (и инстансами для них, правда)
Leonid 🦇
Denis
.Types модули отстой
Denis
по смыслу делить надо, а не по принципу “тут типы, а тут функции"
Leonid 🦇
ну а как еще организовать модуль с сервантовым API?
Leonid 🦇
там вообще всё типы
Denis
.API?
Leonid 🦇
ну а в нем у тебя что всё пачкой?
Denis
у меня вообще API.A.B
Denis
и реэкспортится
Denis
потом import API и норм
Leonid 🦇
Leonid 🦇
потом import API и норм
Причем всё написано сразу для квалифицированных импортов, как Джаспер советует. Да?
Denis
я за неквалифицированные
Alexander
мне под квалифицированные больше нравится
Denis
юзаю квалифицированные, только когда этого не избежать
Leonid 🦇
proj ^. API.createdBy.API.userId
Alexander
а то, doBla (bla :: Bla)
Leonid 🦇
Однако я бы предпочёл что-бы Control.Concurrent.STM.* были под квалифицированные импорты написаны
Alexander
Alexander