Alexander
это же не то, про что я спрашивал?
Alexander
мне нужно .stack-work/build/ghc-.../cabal-../dist/...
Alexander
я спрашивал про стек
Cheese
$ stack path --dist-dir
.stack-work/dist/x86_64-osx/Cabal-2.0.1.0
Alexander
и про то как в нем получить путь до билд директории, т.к. разговор был о билд директории
Alexander
во, это что надо
Cheese
я не знаю, что такое билд-директория. там разные артефакты и временные файлы в разные кладутся. а текущая во время сборки — это директория исходников
Alexander
в общем это единственное место где можно непопорченные исполняемые файлы взять
Alexander
и иногда до них нужен доступ из тестов и т.п.
Alexander
чтобы не делать в 2 гюшага тесты
Cheese
нестрипаные бинарники? да,
${путь к каталогу пакета}/$(stack path --dist-dir)/build/${имя пакета}/${имя программы}
Cheese
кажется, единственное решение
Alexander
ага, ну или кабалом пользоваться, но в кабале пока нету нативного варианта как достать путь
Ilya
если у меня есть монада сложенная из StateT + ReaderT в библиотеке и я хочу дать возможность пользовательскому коду мою монаду заворачивать StateT, ReaderT, etc то мне надо надо заворачивать свою монадку в newtype, создавать LibMonad тайпкласс и делать пачку инстансов для трансформера или можно как-то проще всё сделать?
Ilya
я понимаю что мне тут хочется какие-то labelled effects, но не совсем понимаю как сейчас это в хаскеле модно делать
Dmitrii
@irezvov Это корректный подход. Если хочется иметь возможность заворачивать свою монаду в ReadeT и StateT или ReaderT и StateT в свою монаду, то свою монаду делают как newtype и не реализовывают для нее инстансы MonadReader и MonadState. Но обычно так не хочется. Как по мне, то сырые Reader и State подходят для каких-то небольших и локальных вычислений. Например, написать одну чистую функцию, которую через State намного проще, чем вручную через передачу аргументов. А для большой архитектуры неплохо использовать Three Layers подход (это довольно модный сейчас подход, но он не использует много фич системы типов).
Вообще, labeled effects сделать можно в Haskell, если очень хочется. В этом видео как раз есть пример этого. Так что можно как в Idris писать, если очень хочется.
https://www.youtube.com/watch?v=soKl1IslU-I
Alexander
почитал про Three Layers статейку (http://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html) и что то не особо понял их идеалогию в плане второго уровня. Для начала я не понял как они предлагают комбинировать там разные классы, не через объявление же инстанса зависящего и от того и от того? И что тогда там под капотом, final tagless?
И вообще, зачем все это делается? В 2018 году все вроде перешли с unit tests на behaviour tests и мокать, например, базу данных это уже мовентон, тем более что в типичном веб-приложении, например, большая часть тестов приходится как раз на sql-логику. Собстенно, обычно мокаются только сетевые запросы (как сука долгие) и это как раз делается без заморочек с сужением ответсвенности
Alexander
ну то есть нарезание эндпоинта на мелкие кирпичики это в сущности та же лапша же
Cheese
Dmitrii
@cblp_su К сожалению, ether нельзя использовать для введения большого числа эффектов. Согласно словам @int_index, GHC недостаточно умный в одном месте, из-за чего использование ether приводит к (неточная цитата): "Экспонециальному от числа эффектов времени и памяти компиляции".
Sr
Aleksei (astynax)
Всё же нужно довольно сильно наэфирить, чтобы эффект перестал "стоить того". Если не слишком много ридеров рядом находится, то жить можно.
Евгений
Нужны кайнд-левел доказательства полиномиальности тайп-левела
Alexander
там проблемы если пытаться быть слишком умным и оптимизировать стек
IC
К 8.6 не починят?
Alexander
маловероятно что починят, и.к. это фича дающая много плюсов а нормальном случае
Alexander
а ether не нормальный
IC
Экспоненциальное время компиляции - фича?
IC
Ну вообще да, чтобы писали уже продакшн и не выпендривались.
Alexander
фича это генерация специализаций для инстансов
Alexander
а экспоненуиальное время это абьюз фич гхц библиотекой
Alexander
там в принципе есть что улучшать в гхц
Alexander
или придумать как поиск и компрессию стека сделать линейной по сложности
Alexander
или как сказать гхц не генерить специализации
Alexander
о, я @bravit111 но ретвиту на комментрарий обогнал
Denis
и меня обогнал, по написанному
Vitaly
Так это я и ретвитил!
Vitaly
Мне, кстати, понравилась прошлая неделя
Denis
и кстати, никаких громких холиваров никто не развёл
Denis
это радует
Зигохистоморфный
@astynax страничка про редакторы как бы всегда была)
https://github.com/rainbyte/haskell-ide-chart
Cheese
у всех Syntax highlight = The best™ possible experience. врут же!
Cheese
никто не подсвечивает нормально сигнатуры вида
ffff
:: t
Aleksei (astynax)
Крылатый
Yura
стоит ли отказываться от Стокгольмского синдрома и бросать vim
Aleksei (astynax)
Cheese
Aleksei (astynax)
(/me не может соскочить с Emacs)
Yura
жизнь ли это?
Yura
нужна ли она мне, когда я давно уже мертв изнутри?
Yura
вообще остальные редакторы тоже через ghc-mod работают?
Aleksei (astynax)
it depends
Yura
потому что если - да, то абсолютно пофигу
Aleksei (astynax)
Emacs может использовать ghc-mod, а может и не использовать. Можно использовать HIE, intero и другие варианты
Yura
все те же пляски начнутся, версия либ посвежее и ghc-mod не собирается
Yura
у вас cabal не той системы
Cheese
бэкенды, насколько мне известно, такие:
1. ghc-mod сам по себе не развивается
2. HIE, инкорпорировавший ghc-mod
3. intero
4. hsdev
5. ghcid?
Cheese
Cheese
у Leksah, наверно, что-то своё, но редактор 1 языка никому не нужен
Leonid 🦇
на всё готовы, лишь бы не емакс
Leonid 🦇
/me использует haskell-mode и cabal new -repl
Yura
спасибо @cblp_su
Евгений
Лексах мёртв
Yura
да я тоже использую haskell-mode
Евгений
Но мне кажется, что редактор одного языка не такая уж и плохая идея, вот idea изначально была такой
Yura
но cabal не той системы меня убивает
Cheese
давайте ещё yi помянем
Евгений
yi нерабочий ж всегда был, в отличии от лексах
Yura
Ну они долго работают
Yura
Пара секунд лага
Yura
Быстрее чем билд