Влод
поверить стэку. или проверить наличие именно той фичи, ради которой ты подключил именно эту версию
проверил - не работает, решил спросить в чате) ну скорей всего чел который форкнул не довёл дело до конца
A64m
Ну ладно, рулевой комитет принял поправку, так что теперь 8.6 все пакеты с дженериками (включая аэсон ) не поломает, поломает некоторые другие, ну это как обыяно
A64m
на самом деле давно уже было понятно что так сделают и даже альфу выпустили в таком виде, но официально - только сейчас
Dmitrii
#announcement New project: typerep-map — very efficient dependent map from type representations to values of these types. Blog posts describes how to implement such data structure step by step. https://kowainik.github.io/posts/2018-07-11-typerep-map-step-by-step.html
Dmitrii
Всем привет! Делюсь ссылкой на typerep-map проект, над которым наша организация плотно трудилась в последнее время вместе с @int_index . Библиотека содержит эффективную реализацию отображения из типов в значения с соответствующим типом. А блог пост довольно хорошо описывает, как эта структура разрабатывалась шаг за шагом. Соддержит полезную информацию про RTTI в Haskell и прочие ништяки!
Зигохистоморфный
где она?)
Зигохистоморфный
ссылка
Danila Matveev
Над текстом же
Зигохистоморфный
какой профит от этого?
Dmitrii
Привет, мы используем в проде dependent-sum и dependent-map, из доков пока не понял, можно ли заменить юзкейсы на реализацию с typerep-map. Типичный юзкейс, это параметризация единиц измерения Symbol тэгом, а потом складывание их в мапу по таким тегам.
На Hackage в документации есть пример использования того, как можно использовать параметризацию Symbol - тэгом (если я правильно понял use-case). По сути, если есть DMap TypeRep и insert-ы не так часто происходят, то можно смело менять на TypeRepMap. http://hackage.haskell.org/package/typerep-map-0.1.0/docs/Data-TypeRepMap.html
Dmitrii
если вы оптимизируете поиск в массиве, возможно вам будет интересен вот этот пейпер
Спасибо за рекомендацию! Этот пейпер не видел. Но из абстракта вижу, что они рекомендуют для больших n использовать Eytzinger layout, типа это самый быстрый вариант. Это как раз именно то, что и реализовано сейчас в typerep-map.
A64m
ну там можно посмотреть как его бранч-фри версию реализовывать, и как использовать префетчи и т.д.
A64m
не уверен правда, что в гхц префетчи без ллвм бекенда будут работать
Dmitrii
ну там можно посмотреть как его бранч-фри версию реализовывать, и как использовать префетчи и т.д.
Интересно. Branch-free версию можно будет попробовать и посмотреть, насколько лучше становится
A64m
прямо скажем, сильного улучшения я бы не ждал
Ilya
А вот как бы мне достать тип-аргумент из экзистенциального констуктора?
Dmitrii
Похоже, что может подойти, не хватает только операций для аппликативного traverse и конвертации в/из список (для серилазиации в aeson, например)
Можете открыть issue на Github, и мы подумаем, как это сделать! Насчет аппликативного traverse не уверен, но конвертацию в/из список можно будет добавить
A64m
@chshersh а какая разница была между "наивным" кодом и ручным анбоксом? Или с самого начала так и писали?
Dmitrii
@chshersh а какая разница была между "наивным" кодом и ручным анбоксом? Или с самого начала так и писали?
Сначала писали наивный код. А потом анбоксили вручную, чтобы убедиться, что GHC все хорошо инлайнит. Иногда разницы не было. А иногда перформанс значительно увеличивался, а сгенерированный core становится намного более хорошим
A64m
такие случаи заметного улучшения довольно интересны, было бы полезным их как-то задокументировать
A64m
или даже зарепортить как баги
Dmitrii
такие случаи заметного улучшения довольно интересны, было бы полезным их как-то задокументировать
Может быть @vrom911 напишет еще блог-пост про то, как эта вся эпопея происходила)
A64m
гхц вообще не хватает тестов с реальным кодом который он мог бы начать или перестать улучшать, а не вот этого вот вымученного нофиба из 92-го года
kosc
~/tmp/haskell/worldscount $ stack install encoding Error: While constructing the build plan, the following exceptions were encountered: In the dependencies for encoding-0.8.2: regex-compat-0.95.1 must match >=0.71 && <0.95 (latest applicable is 0.93.1) needed for unknown reason - stack invariant violated. Plan construction failed. ~/tmp/haskell/worldscount $ stack install regex-compat-0.93.1 ~/tmp/haskell/worldscount $ stack install encoding Error: While constructing the build plan, the following exceptions were encountered: In the dependencies for encoding-0.8.2: regex-compat-0.95.1 must match >=0.71 && <0.95 (latest applicable is 0.93.1) needed for unknown reason - stack invariant violated. Plan construction failed. Помогите, плиз. Не могу поставить пакет encoding через stack.
kosc
Вроде как ему нужна более старая библиотека, но я её уже поставил.
kosc
И всё равно та же ошибка.
Aleksei (astynax)
Да блин! Зачем делать stack install?!
Aleksei (astynax)
Не нужно делать stack install НИКОГДА!
kosc
А как надо-то?
kosc
Понял.
kosc
Простите меня, я питонист.
Aleksei (astynax)
Стек сам ставит зависимости. Нужно их указать в .cabal-файле проекта
кана
Не нужно делать stack install НИКОГДА!
ну иногда нужно, но не для установки либ, а для установки хаскельных тулов, которые есть в стакадже
Aleksei (astynax)
Простите меня, я питонист.
Ага, pip дурные привычки вырабатывает :)
PsyDebug
Не нужно делать stack install НИКОГДА!
а как иначе в ghci какую-то либу потыкать, прежде чем в проект добавлять?
kosc
$ stack init Looking for .cabal or package.yaml files to use to init the project. In order to init, you should have an existing .cabal file. Please try "stack new" instead. CallStack (from HasCallStack): error, called at src/Stack/Solver.hs:551:9 in stack-1.5.1-8L0HpUwgvNa7pLuInyRw8N:Stack.Solver
kosc
А, понял.
PsyDebug
stack ghci --package=lens
о, благодарю
Aleksei (astynax)
init делает из не-stack-проекта stack-проект
kosc
Ммм
kosc
Дурные привычки гита?
kosc
git init
kosc
stack init
Aleksei (astynax)
Типа того :)
Cheese
stack ghci --package=lens
надо викифицировать
Aleksei (astynax)
а как иначе в ghci какую-то либу потыкать, прежде чем в проект добавлять?
Лучше играться в проекте-песочнице, т.к. может потребоваться какая-нибудь зависимость не из снапшота, а если не находиться в проекте, то stack.yaml, чтобы указать эти зависимости, не будет
Vladislav
Есть еще вариант не использовать stack вообще, не хватает всего нескольких фич
Aleksei (astynax)
Да ладно, новичкам (и не только) удобно же :)
kosc
Средних размеров пасту лучше так или лучше на пастбин?
Aleksei (astynax)
И отвечать на вопрос по stack "не используйте stack" некрасиво, ИМХО :)
Vladislav
Да ладно, новичкам (и не только) удобно же :)
Он тормозной как минимум, это уже неудобно
kosc
Окей
kosc
$ stack new words Downloading template "new-template" to create project "words" in words/ ... The following parameters were needed by the template but not provided: author-email, author-name, category, copyright, github-username You can provide them in /home/kosenko/.stack/config.yaml, like this: templates: params: author-email: value author-name: value category: value copyright: value github-username: value Or you can pass each one as parameters like this: stack new words new-template -p "author-email:value" -p "author-name:value" -p "category:value" -p "copyright:value" -p "github-username:value" Looking for .cabal or package.yaml files to use to init the project. Using cabal packages: - words/words.cabal Selecting the best among 14 snapshots... Downloaded lts-12.0 build plan. AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""
PsyDebug
Он тормозной как минимум, это уже неудобно
расскажи что и как есть удобней?)
Vladislav
расскажи что и как есть удобней?)
cabal начиная с версии 3 (ее еще не релизнули, но я пользусь тем, что сбилдил из master)
Aleksei (astynax)
stack upgrade
kosc
stack upgrade
Так уже...
Vladislav
удобно, конечно (нет)
ты про то, что билдить из master надо? это один раз неудобно, а потом много раз удобно, ну и это временная проблема
Aleksei (astynax)
Это как универсальная машинка для стрижки? (головы у всех разные до первого раза)
Vladislav
я иногда пишу stack build по привычке, и он такой тормозной, что я успеваю интерраптнуть его до того, как он начнет что-то делать, и ввести cabal new-build
Vladislav
а еще всё удобство стека заканчивается в первый же момент, когда он факапит recompilation detection и ломает линковку
Aleksei (astynax)
Так уже...
Весрия stack какая?
Vladislav
можно rm -rf .stack-work ~/.stack и уходить погулять
kosc
Весрия stack какая?
Version 1.5.1, Git revision 600c1f01435a10d127938709556c1682ecfd694e (4861 commits) x86_64 hpack-0.17.1
Aleksei (astynax)
Последний раз делал такое месяцев семь назад
Vladislav
последний раз я пользовался стеком пару месяцев назад и делал так каждую неделю
Aleksei (astynax)
$ stack --version Version 1.7.1
Aleksei (astynax)
Чтобы stack upgrade сработал, нужно, чтобы путь, куда stack кладёт бинари, был в PATH, если что