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 🦇
Maybe Either Either как-то правда попахивает
ну это он преувеличивает. но парочка Either иногда бывает...
Leonid 🦇
ну вот я тут тоже не уверен.
Leonid 🦇
Prelude.Extended хм
Alexander
Extended это как Utils..
Alexander
или Missing которое немного smells
Зигохистоморфный
лучше Extra
кана
хорошо в жиес, называешь целый модуль по имени целой одной функции в нем на две строчки, в npm выкладываешь
Leonid 🦇
Extended это как Utils..
это как раз у него вместо Utils. из Utils ты сам модуль не экспортируешь
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
> I think having a .Types module is a Haskell antipattern. TRIGGERED
ну вот всерашний тормозной телегобот как раз из-за этого паттерна тормозной
A64m
тормозной в смысле компиляции
Leonid 🦇
Вообще хороший доклад
A64m
но последние пару лет, похоже, это уже основные обсуждаемые тормоза
Alexander
Leonid 🦇
я читал их уже
ну тогда же понятно чем от Utils отличается
A64m
но пирамида не совсем правильная все же.
Alexander
ну тогда же понятно чем от Utils отличается
если я делаю utils я тоже реэкспортирую
Alexander
в чем разница то (но яобычно не делаю utils)
Alexander
тем более это не гарантирует того, что не будет Externded1 и Extended2
A64m
ну, если сильно постраться, то можно обойтись для написания программ какими-то кондовыми библиотеками, для которых каких-то адвансед знаний хаскеля не надо
A64m
но популярные библиотеки часто не такие
Alexander
про Types там про то, что только типы причем все подряд
Alexander
это действительно убого
Leonid 🦇
если я делаю utils я тоже реэкспортирую
Разница между MyProgram.Utils в котором всё подряд и Data.ByteString.Extended в котором только ByteString
Alexander
ну Utils где все подряд это точно антипаттерн
Leonid 🦇
про Types там про то, что только типы причем все подряд
Ну я так делал когда тип надо еще где-то. Допустим у меня есть ProjectId, UserId, AssetId и они нужны в разных модулях где Project, User, Asset определены
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
ну и вот вчера же был модуль со всеми рекордами (и инстансами для них, правда)
Denis
.Types модули отстой
Denis
по смыслу делить надо, а не по принципу “тут типы, а тут функции"
Leonid 🦇
ну а как еще организовать модуль с сервантовым API?
Leonid 🦇
там вообще всё типы
Denis
.API?
Leonid 🦇
ну а в нем у тебя что всё пачкой?
Denis
у меня вообще API.A.B
A64m
С оргомной суммой рекордов!
там она процентов 20% модуля и помимо нее еще куча рекордов
Denis
и реэкспортится
Denis
потом import API и норм
Leonid 🦇
потом import API и норм
Причем всё написано сразу для квалифицированных импортов, как Джаспер советует. Да?
Denis
я за неквалифицированные
Alexander
мне под квалифицированные больше нравится
Denis
юзаю квалифицированные, только когда этого не избежать
Leonid 🦇
proj ^. API.createdBy.API.userId
Alexander
а то, doBla (bla :: Bla)
Leonid 🦇
Однако я бы предпочёл что-бы Control.Concurrent.STM.* были под квалифицированные импорты написаны
Alexander