
Stepan
27.05.2018
08:56:08

Yuriy
27.05.2018
10:22:33

Alexander
27.05.2018
10:23:11
это же не то, про что я спрашивал?

Google

Alexander
27.05.2018
10:23:39
мне нужно .stack-work/build/ghc-.../cabal-../dist/...

Yuriy
27.05.2018
10:23:55

Alexander
27.05.2018
10:24:24
я спрашивал про стек

Yuriy
27.05.2018
10:24:45
$ stack path --dist-dir
.stack-work/dist/x86_64-osx/Cabal-2.0.1.0

Alexander
27.05.2018
10:24:46
и про то как в нем получить путь до билд директории, т.к. разговор был о билд директории
во, это что надо

Yuriy
27.05.2018
10:25:51
я не знаю, что такое билд-директория. там разные артефакты и временные файлы в разные кладутся. а текущая во время сборки — это директория исходников

Alexander
27.05.2018
10:27:56
в общем это единственное место где можно непопорченные исполняемые файлы взять
и иногда до них нужен доступ из тестов и т.п.
чтобы не делать в 2 гюшага тесты

Yuriy
27.05.2018
10:33:18
нестрипаные бинарники? да,
${путь к каталогу пакета}/$(stack path --dist-dir)/build/${имя пакета}/${имя программы}
кажется, единственное решение

Alexander
27.05.2018
10:58:50
ага, ну или кабалом пользоваться, но в кабале пока нету нативного варианта как достать путь

Google

Ilya
27.05.2018
23:14:30
если у меня есть монада сложенная из StateT + ReaderT в библиотеке и я хочу дать возможность пользовательскому коду мою монаду заворачивать StateT, ReaderT, etc то мне надо надо заворачивать свою монадку в newtype, создавать LibMonad тайпкласс и делать пачку инстансов для трансформера или можно как-то проще всё сделать?
я понимаю что мне тут хочется какие-то labelled effects, но не совсем понимаю как сейчас это в хаскеле модно делать


Dmitry
28.05.2018
01:18:54
@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
28.05.2018
04:41:09
почитал про Three Layers статейку (http://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html) и что то не особо понял их идеалогию в плане второго уровня. Для начала я не понял как они предлагают комбинировать там разные классы, не через объявление же инстанса зависящего и от того и от того? И что тогда там под капотом, final tagless?
И вообще, зачем все это делается? В 2018 году все вроде перешли с unit tests на behaviour tests и мокать, например, базу данных это уже мовентон, тем более что в типичном веб-приложении, например, большая часть тестов приходится как раз на sql-логику. Собстенно, обычно мокаются только сетевые запросы (как сука долгие) и это как раз делается без заморочек с сужением ответсвенности
ну то есть нарезание эндпоинта на мелкие кирпичики это в сущности та же лапша же

Yuriy
28.05.2018
06:07:42

Dmitry
28.05.2018
07:18:01
@cblp_su К сожалению, ether нельзя использовать для введения большого числа эффектов. Согласно словам @int_index, GHC недостаточно умный в одном месте, из-за чего использование either приводит к (неточная цитата): "Экспонециальному от числа эффекта времени и памяти компиляции".

Stepan
28.05.2018
08:29:26

Aleksey
28.05.2018
08:35:27
Всё же нужно довольно сильно наэфирить, чтобы эффект перестал "стоить того". Если не слишком много ридеров рядом находится, то жить можно.

Denis
28.05.2018
08:37:39

Евгений
28.05.2018
08:38:30
Нужны кайнд-левел доказательства полиномиальности тайп-левела

Alexander
28.05.2018
08:38:53
там проблемы если пытаться быть слишком умным и оптимизировать стек

IC
28.05.2018
08:39:22
К 8.6 не починят?

Alexander
28.05.2018
08:39:55
маловероятно что починят, и.к. это фича дающая много плюсов а нормальном случае
а ether не нормальный

IC
28.05.2018
08:40:31
Экспоненциальное время компиляции - фича?
Ну вообще да, чтобы писали уже продакшн и не выпендривались.

Alexander
28.05.2018
08:41:09
фича это генерация специализаций для инстансов
а экспоненуиальное время это абьюз фич гхц библиотекой
там в принципе есть что улучшать в гхц

Google

Alexander
28.05.2018
08:45:36
или придумать как поиск и компрессию стека сделать линейной по сложности
или как сказать гхц не генерить специализации
о, я @bravit111 но ретвиту на комментрарий обогнал

Denis
28.05.2018
09:29:06
и меня обогнал, по написанному

Vitaly
28.05.2018
09:29:07
Так это я и ретвитил!
Мне, кстати, понравилась прошлая неделя

Denis
28.05.2018
09:30:17
и кстати, никаких громких холиваров никто не развёл
это радует

Denis
28.05.2018
14:25:56
@astynax страничка про редакторы как бы всегда была)
https://github.com/rainbyte/haskell-ide-chart

Yuriy
28.05.2018
14:49:56
у всех Syntax highlight = The best™ possible experience. врут же!
никто не подсвечивает нормально сигнатуры вида
ffff
:: t

Aleksey
28.05.2018
14:50:46

Дед Пегас
28.05.2018
14:50:57

Yura
28.05.2018
14:51:12
стоит ли отказываться от Стокгольмского синдрома и бросать vim

Aleksey
28.05.2018
14:51:45

Yuriy
28.05.2018
14:51:56

Aleksey
28.05.2018
14:51:59
(/me не может соскочить с Emacs)

Yura
28.05.2018
14:52:03
жизнь ли это?
нужна ли она мне, когда я давно уже мертв изнутри?
вообще остальные редакторы тоже через ghc-mod работают?

Google

Aleksey
28.05.2018
14:54:05
it depends

Yura
28.05.2018
14:54:05
потому что если - да, то абсолютно пофигу

Aleksey
28.05.2018
14:54:43
Emacs может использовать ghc-mod, а может и не использовать. Можно использовать HIE, intero и другие варианты

Yura
28.05.2018
14:54:49
все те же пляски начнутся, версия либ посвежее и ghc-mod не собирается
у вас cabal не той системы

Yuriy
28.05.2018
14:58:52
бэкенды, насколько мне известно, такие:
1. ghc-mod сам по себе не развивается
2. HIE, инкорпорировавший ghc-mod
3. intero
4. hsdev
5. ghcid?
у Leksah, наверно, что-то своё, но редактор 1 языка никому не нужен

Leonid
28.05.2018
15:02:18
на всё готовы, лишь бы не емакс
/me использует haskell-mode и cabal new -repl

Yura
28.05.2018
15:02:50
спасибо @cblp_su

Евгений
28.05.2018
15:03:18
Лексах мёртв

Yura
28.05.2018
15:03:34
да я тоже использую haskell-mode

Евгений
28.05.2018
15:03:43
Но мне кажется, что редактор одного языка не такая уж и плохая идея, вот idea изначально была такой

Yura
28.05.2018
15:03:52
но cabal не той системы меня убивает

Yuriy
28.05.2018
15:04:43
давайте ещё yi помянем

Евгений
28.05.2018
15:05:25
yi нерабочий ж всегда был, в отличии от лексах

Алексей Ayaye :)
28.05.2018
15:27:00

A64m
28.05.2018
16:08:15

Yura
28.05.2018
16:29:49
Ну они долго работают

Google

Yura
28.05.2018
16:30:09
Пара секунд лага
Быстрее чем билд

Ilya
28.05.2018
16:52:04
начал переписывать тайпалиас на ньютайп + LibMonad тайпкласс и вылезла интересная проблема https://gist.github.com/SPY/ff745898629800f967949cd14ead1ed5
раньше во вспомогательных тайпклассах я использовал конкретный тайпнейм и по этому тайпчекер всё понимал, но теперь когда всё ушло в констрейнты type OutType перестал чекаться, потому что для монадного инстанса он слишком общий
это как-то можно победить? какой-нибудь волшебный экстеншен который позволит констренты в дефинишен типа например добавить или ещё что-то такое
выглядит так, что мне нужно что-то типа этого https://ghc.haskell.org/trac/ghc/ticket/4259

Dmitry
28.05.2018
17:40:41
m (Proxy t) перекрывается с Loc t. Надо как-то их разделять. У t кайнд Type в обоих случаях? Нельзя какой-нибудь специальный кайнд завести?
Можно еще добавить в класс параметр (isLoc :: Bool). И различать по 'True или 'False (скорее всего - вспомогательный класс сделать).

Alexander
28.05.2018
17:51:48
хотя кому и Applicative конфиг

Ilya
28.05.2018
18:01:09
пытаюсь запилить на мультипарам тайпклассах, но пока что-то тяжко идет

Dmitry
28.05.2018
18:04:27
Вспомогательный класс с доп. параметром с кайндом Bool.
А у тебя еще будут инстансы или только два? А то можно закрытую type family использовать. Там ничего не перекроется.

Ilya
28.05.2018
18:09:46
я вынес в закрытую тайпфемили, но там всё ещё сложнее оказалось ?

Dmitry
28.05.2018
18:10:21
Почему?

Ilya
28.05.2018
18:10:52
там не очевидно что FunGenMonad m из констрейнта для produce мапится на FunGenMonad m из заголовка инстанса
и получается что бы их унифицировать всё равно надо выносить это на уровень тайпкласса
хотя загнался, это другая проблема
ща вспомню почему не работала закрытая тайпфемили