Aliester
parket
Vladislav
У всех воспаление TH от makeLenses
Denis
TH бояться - на хаскелле не писать
Vladislav
Меня больше смущает предлагаемая терапия вырезания TH полностью, а deriving вместе с ним
Vladislav
как Диль предлагает
Denis
диль - сектант
Vladislav
Это какая-то ампутация вместо лечения
Denis
он считает что гадт это слишком сложно и загубит компанию, в чей репозиторий его закоммитили
parket
Vladislav
нет головы — нет перхоти
Vladislav
нет TH — нет медленной компиляции
Алексей
А что за тема с ампутацией TH и deriving?
Alexander
меня вот пугают эти снойманы, алены, дили этим
Denis
нет компилятора - нет TH
Alexander
снойманы ещё как-то выглядят позитивно на этом фоне
A64m
вообще ненависть к ГАДТам может быть опраданна, принимая во внимания их недоделанность. тут для них не выводится, там не матчится, здесь полнота матчинга не проверяется
Alexander
написать stack ghci и все быстро
Vladislav
Denis
снойман выглядит даже менее чудным в этом списке
Vladislav
Снойман нам сказал тайпклассы на монадах не использовать кроме MonadReader, А ТО СЛОЖНО
Denis
Алексей
Denis
ставим диагноз через твиттер, недорого
Vladislav
Их позицию можно понять так, что Haskell даже без всех этих фич представляет собой strict improvement over Java/Go/etc, а потому надо на Haskell писать как на улучшенном Java/Go и получать строго преимущество без ассоциированной боли тайплевела
Alexander
вот да
Alexander
гонзалеса - периодически накрывает
Alexander
причем в разные стороны
Denis
а для тайплевела надо грамоту от диля лично получить?
Denis
с позволением барским?
A64m
да мало ли что тормозить может. оптимизатор может кучу кода нагенерить при каком-нибудь специализации кода под конструкторы или еще чего
Vladislav
Для хобби-проектов нет, а для бизнеса конечно
Vladislav
Вот наймешь Диля, он тебе разрешит
Vladislav
И будешь успешен
Denis
бизнес-грамоты дороже у него, я слышал
Алексей
Так и представляю основателей стартапов, едущих к Дилю получать ярлыки на тайп-левел
Aliester
а грамота как в младшей школе?
Aliester
Alexander
@int_index снойман на внутренних семинарах что-нить интересное рассказывает
Aliester
только вместо орла - лого хаскеля
Alexander
?
Vladislav
@qnikst ну он скорее пытается вдолбить в нас своего рода common sense, типа "не ловите асинхронные исключения", "используется кондуиты", "fp complete клевые"
Denis
про последнее не сомневаюсь
Alexander
но.. асинхронные исключения иногда надо ловить, а кондуиты говно?
Vladislav
А один раз они дебажили GHC после того, как мой тайплевел заставил GHC отжирать >60 GiB, они нашли баг в GHC, и с тех пор мой тайплевел запретили
Alexander
ладно кондуиты хорошие как го
Vladislav
А баг даже не зарепортили
Vladislav
Он теперь фольклорный
Alexander
серьезно?
Vladislav
Да
Denis
мы недавно пару зарепортили с тайплевелами и один уже починили
Denis
и один еще я зарепортить не могу нормально, потому что недоразобрался
Denis
там как раз такие же симптомы
Denis
уходит в своп, выедает всю память, ад, израиль
Alexander
ну там вроде нето баг не-то фича
Denis
начиная с дешугаринга плохо, во время симплификации вообще ад(первых пару проходов)
Denis
может это по заказу диля фича, чтобы тайплевел не юзали?
A64m
я уже в каком-то обсуждении читал, что тайпчекер не "интерпретировать" должен, а джитить код, а то тайплевел тормозит
Vladislav
В моем случае там ад со специализацией, GHC генерирует coercions экспоненциального размера от глубины трансформерного стека
Vladislav
Надо зарепортить бы уже полгода как, но мне лень
Denis
A64m
хотя он тормозит-то из-за алгоритмической сложности обычно
Denis
Vladislav
Посмотри генерируемые .hi-файлы, там дампятся coercions, их размер можно сравнить в зависимости от кол-ва полей
Vladislav
Вроде похоже
Denis
я по выхлопу GHC смотрел количество coercions, там для одного метода до 20к бывает
Alexander
вот похоже
Denis
в сумме на маленькую программу набегает миллиона два
Vladislav
У меня там ситуация была в том, что тип был вроде ReaderT (Record '[A, B, C, D, E]), и чтобы найти MonadReader X m, то был поиск по принципу линейной сортировки, то есть пробовало подобраться X в Record '[A, B, C, D, E], потом в Record '[B, C, D, E], потом в Record '[C, D, E], etc. Если искать N полей, а в рекорде их M, то выходило N*M вариаций. GHC очень старательно для каждой этой вариации специализировал Applicative/Monad/etc, потому что всё это выполнялось над монадическим трансформером
Vladislav
получалось несколько млн coercions тоже
Vladislav
Хотя это не экспоненциально, а квадратично получается. Может я что-то упускаю, там вроде еще хуже было
Denis
описываешь квадратичный рост тут, но может он и был квадратичный?
Vladislav
Уже не уверен
Vladislav
Вроде должен быть 2^n, а не n^2, я могу не помнить детали
Alexander
там что-то ещё было
Alexander
по словам никласа
Denis
где там?
Alexander
что в каждом модули где эти классы появлялись генерилось много больше инстансов
Alexander
у них в проекте