Alexander
ну поиск списка это проще чем отрицательный констрецнт
Alexander
особенно обобщенный
IC
куда копать?
A64m
> I'm disappointed that Michael's concerns regarding multiple public libraries were completely disregarded опять нехорошие кабалисты фичи добавляют не послушав сноймана
A64m
Гонзалес не хочет в рулевой комитет выдвигаться - повезло!
Vladislav
где это читать
A64m
https://www.reddit.com/r/haskell/comments/8yz92h/a_year_into_backpack_inside_2455d/
Leonid 🦇
это поди опять тот самый тролль
A64m
сейчас что-то весело комментарии против стека плюсовать стали
A64m
> So fpco decided to reinvent cabal-install instead of contributing to its development and now they're realizing the costs of NIH? Too bad! плохо придется правда хаскелистам вообще а не стекоразработчикам. им теперь можно плевать на все, заметное число твсе равно будет стеком пользоваться, а значит нормального распространения бекпак не получит, ведь особых перспектив поддержки в стеке нету
A64m
так что снойман фактически удушил модули в колыбели, отличная работа!
Leonid 🦇
у бекпака UX так себе в любом случае
A64m
для энкодинга тайпклассов или чего-то вроде да, для того, для чего он планировался - норм.
Vladislav
сейчас, наткнувшись на баг в Бэкпеке, узнал, какой бардак с package id в GHC
Vladislav
я-то думал там красиво всё сделали, а вот нет
A64m
но понятно что всегда захотят использовать не для того, для чего фича планировалась, так что конечно надо нормальный синтаксис для хаскельных файлов делать
A64m
по крайней мере недовольных тем, что его нет в обсуждении полно
Ignat
и в крестах можно
Ignat
вот и обнаружены 2 языка с лучшими системами типов
Cheese
и в крестах можно
неправда, туда классы ещё не завезли
Ignat
ну всяческих type_traits можешь написать каких душе угодно
Крылатый
Правда, выглядить это будет просто адова.
A64m
но, конечно, довольно забавно, что (потенциальные) пользователи первой практической имплементации (недо) миксинов жалуются на UX по сравнению с функторами, хотя миксины как раз придумывались для улучшения UX функторов.
Антон
а в Расте можно 😜
Так там вроде это только на Send и Sync распространяется
Dmitrii
у серокелей в predule их было что-то такое чтобы Exception запрещать
В universum нет ничего про запрещение констрейнтов. Были обсуждения в cardano-sl касательно запрещения Exception. Вот в этом посте кто-то тогда спрашивал: * https://www.reddit.com/r/haskell/comments/7xcfkk/defining_a_negative_type_constraint/
Timofey
А вообще появились вменяемые тьюторилы по бакпаку? Когда его только анонсировали, была куча восторженных бессмысленных постов, но ни один даже и не попытался ответить, зачем бакпак нужен и какую проблему он решает
A64m
не понимаю, о каких постах речь
Timofey
я тогда гуглил этот бакпак, попадал только на всякие "о да, я буду это юзать" на реддите и в личных стандалоун-бложиках
Dmitrii
А вообще появились вменяемые тьюторилы по бакпаку? Когда его только анонсировали, была куча восторженных бессмысленных постов, но ни один даже и не попытался ответить, зачем бакпак нужен и какую проблему он решает
Я понял хорошо use-case бэкпака и зачем он нужен после выступления @int_index на митапе Serokell. Хотя да, было бы неплохо иметь полноценный туториал с собирающимся примером...
Dmitrii
A64m
есть мотивация в пропозале https://github.com/ezyang/ghc-proposals/blob/backpack/proposals/0000-backpack.rst#motivation
A64m
есть туториал в янговском диссере https://github.com/ezyang/thesis/releases/download/rev20170925/main.pdf
Dmitrii
Хотя я что-то припоминаю про слайды, надо @int_index спросить...
Vladislav
Вроде я нарисовал какие-то слайды пока ехал на поезде в Петербург, а потом перерисовывал их от руки на вайтборд
Vladislav
Исходников у меня не сохранилось точно
Евгений
Меня в бекпаке беспокоит только одно — как чётко отделить юзкейсы бекпака от тайпклассов? По наличию законов?
Vladislav
Нет, по возможности провести все инстанцирования в компайл-тайме. Напр. в полиморфной рекурсии так не выйдет, поэтому бэкпэк не подойдет
A64m
ну кое-какие пересечение у них есть, но не надо его переоценивать
A64m
тайпклассы вместо модулей в хаскеле не особо используются. это всякие сомнительные пакеты вроде листлайк, единственная популярная библиотека которая что-то вроде такого делает это vector, и то там модули костылятся не только на тайпклассах, но и на сишном препроцессоре что уже совсем ужас
A64m
короче говоря, там где должны бы быть модули в хаскеле обычно просто копипаст, сишный препроцессор или вообще ничего
A64m
так что и какой-то реальной проблемы выбора между модулями и тайпклассами просто не существует
Евгений
А когда ты говоришь "вместо модулей" ты имеешь ввиду беззаконные тайпклассы или что? Я просто плохо одного от другого могу отделить
A64m
да законность тут не при чем.
Евгений
Тогда попробуй сформулировать критерии
Евгений
Ну то есть я понимаю, что 45 вариантов строк и 14 мапов это юзкейс модулей
Евгений
Но это интуитивно всё
A64m
смысл модулей, грубо говоря, в том, что мы можем рассматривать импорт вроде import Data.Text как некий параметр, а список импортированного - как тип этого параметра. т.е. мы ничего не меняя в коде можем подменить используемую библиотеку другой, которая подходит к интерфейсу который мы используем.
A64m
насколько это можно реализовать тайпклассами? да почти ни насколько.
Leonid 🦇
Как там, кстати text-utf8 у hvr? Давно я не смотрел
A64m
мы можем превратить Data.Text в один здоровенный тайпкласс с зиллионом методов, но эта деталь просочиться в использующий модуль, у нас в сигнатурах не будет конкретных типов, а будет класс и параметры
A64m
с другой стороны - тоже проблема. в случае модулей нам достаточно имплементировать в подставляемом в параметр модуле только то, что реально используется в параметризованном модуле.
A64m
но с случае мегатайпкласса надо всегда имплементировать все либо нарываться на рантайм ошибки
A64m
модули, на самом деле, как и тайпклассы не полностью соотвествуют такому идеалу, в случае эмельных функторов импорт все же отличается от параметра - параметр не воображаемый а реальный и надо вручную подставлять другие модули в функтор
Vladimir
Затея сделать параметризованные модули в кабале -- это не очевидно, но звучит офигенно. Притащить вывод типов модулей в систему сборки -- это что-то очень доброе.
A64m
т.е. как и в случае тайпклассов надо сразу вкладываться в архитектурку, которая становится все навороченнее и дальше дела развиваются так: ехал функтор через функтор, видит функтор в функтор функтор сунул функтор функтор в функтор - функтор функтор функтор функтор
A64m
в 2000-х поэтому дреер с россбергом придумали миксины, которые уменьшают такие вложения в архитектурку и пытаются сделать весь этот функтор-пламбинг автоматически
Евгений
А в бекпаке миксины?
A64m
не совсем
A64m
там есть разделение на сигнатуры и структуры - в мискинах нет
A64m
но автоматизация применения "функторов" и замаскированные под обычные импорты параметры есть
A64m
у этой автоматизации есть своя цена, очень тупая проверка соотвествия структуры и сигнатуры.
A64m
в макквиновских модулях она умная, с сабтайпингом, но миксины такое не осиливают
A64m
также янг не имплементировал рекурсию.
A64m
рекурсия это тоже улучшение миксинов по сравнению с макквиновскими функторами, которые с ней не дружат
A64m
впрочем, насчет придумали миксины - тут поправка нужна, миксины придумали в скриптах, дреер с россбергом придумали как их для нормальных языков сделать
Евгений
Рекурсивные модули, которые ты скидывал недавно, мне очень dhall напомнили. Мне кажется, что у них и проблемы будут соответствующие с вербозностью
A64m
так это "дхолл сделанный правильно". впрочем, дхолл вроде как отходит от модулей, там же в новых версиях вроде нельзя значения и типы в одном "рекорде" иметь
A64m
вообще не факт, что гонзалес в курсе, что он фактически переизобретает модули, так что шансы изобрести велосипед с квадратными колесами не прочитав ничего про модулестрадания за последние 35 лет у него высоченные
A64m
где-то чатик прорекламировали что-ли?
Bogdan
Первый в поиске по запросу "Haskell"
Andrey
🍿
A64m
ну 5 джойнов пачкой это не объясняет
Alexander
Это просто случайность.