Alexander
можно конкретно в данном случае
Leonid 🦇
меня вчера в расточате уверяли что ансейф примитивы положено только в стд использовать, потому что там боги а все остальные тупые
Leonid 🦇
Денис
Денис
Денис
ну я точно тупой
Leonid 🦇
это конечно в blah
Alexander
в общем использование unsafePerformIO для создания топ-левел констант инициализация которых в IO это один из немногих валидных юзкейсов
Alexander
естественно с uninline
Alexander
noinline
Alexander
(тупой Т9)
Alexander
но константа действительно должна быть константой
Alexander
это хуже reader тем, что нету функции local
Alexander
так же тем что по типу такого поведения не видно
Alexander
из плюсов, что композить такие функции проще
Alexander
учитывая, что это используется для отладки - не платить трейдоф за ReaderT просто так - вполне нормально
Денис
Leonid 🦇
господи
Денис
вы на хаскеле пишете, хеллоу
Cheese
надо различать преждевременную оптимизацию и правильное проектирование
Денис
Leonid 🦇
вот я уверен что фраза про преждевременную оптимизацию вырвана из контекста.
А привела она ко всему этому горькому катаклизму который я тут наблюдаю... И Владимир Николаевич тоже
Cheese
Денис
соглашусь
Денис
Alexander
делать ReaderT на любую константу (или runtime константу конечно можно)
Leonid 🦇
Денис
но это же почти всегда
Leonid 🦇
Почти всегда в каких задачах то? В компиляторе? Или в рейтрейсере? Или в игрушках (разве что IO с gpu) ?
Денис
во многих
Alexander
тут-то ботлнек при чем?
Alexander
ReaderT Conf имеет смысл если зависимость от Conf это важная часть приложения
Alexander
кстати есть веселая либа hflags
Alexander
там все радостные практики связаны, TH, сборка инстансов в Main, unsafePerformIO
Vladislav
Vladislav
идеология не только приемлима, она еще и нужна
Alexander
не нужна, нужна аргументация нормальная и доводы
Денис
Если нет идеологии, то получается c++
Vladislav
Без нее можно скатиться в локальные максимумы слишком легко. Если адекватно взвестить все за и против, можно прийти к решению, которое в данном контексте наилучшее. Идеология может (а хорошая - должна) привести к качественным прорывам
Алексей
А если есть — эльм
Vladislav
Например, можно было использовать unsafeCoerce потому что так быстрее и "I know what I'm doing", а можно было придумать Coercible
Vladislav
Ну и собственно вариант с unsafeCoerce и привел к тому, что до ролей и Coercible у нас GND был subtly broken
Vladislav
Или еще пример. Если руководствоваться только практикой и юзкейсами, можно взять и придумать stack, а потом страдать с его снэпшотами. А можно до последнего добиваться нормального солвера и придумать cabal new-build с nix-style storage
Leonid 🦇
ЧТД
Leonid 🦇
Практики можно тут спрашивать, если что. Мы хоть посремся
Алексей
Мне кажется, что @qnikst и @int_index понимают под идеологией разные вещи
Anatolii
а вы при разработке используете репл?
Vladislav
немножко
Alexander
немного, т.к. полноценно тулинг не позволяет
Anatolii
этот вопрос у меня возник после прочтения статьи тонского
Anatolii
Alexander
я просто для запуска м проверки простых вещей и быстрого ребилда использую
Anatolii
ну я тоже для проверки простых вещей
Alexander
хотел бы уметь копировать определения в файл и обратно
Anatolii
я когда надо что-то посложнее сделать - делаю модуль отдельный и его загружаю
Anatolii
в репл
Aleksei (astynax)
Позднее связывание же
Anatolii
ну я понимаю - я поэтому и спросил
Anatolii
я маленькие функции часто проверяю в репле
Anatolii
и мне очень не хвататет его в других местах
Anatolii
*языках
Зигохистоморфный
*языках
вроде во многих есть реплы
Anatolii
в других - это у меня Го, правда я уже на нем не писал совсем месяца 3-4
Alexander
для репла нужно или лиспом быть лиспом или много тулинга
Leonid 🦇
Репл в хаскеле заменяет 80 юзкейзов дебагера в плюсах
Anatolii
просто вот этот репло подход - мне кажется что если я через месяц опять сяду что-то править, то уже не вспомню что там реплах было у меня
Anatolii
но вот чтобы здесь и сейчас написать - конечно с реплом быстрее будет
Dmitrii
Один из юзкейзов репла: удобно было структурки данных сериализовать на лету, чтобы затем написать бинарный протокол в документации (на случай если захотят люди на других языках реализовать протокол). А сейчас репл используется, чтобы тестировать Servant-овские хэндлеры, выполняющие SQL запросы. Используется protocol-buffers, поэтому непосредственно эндпоинты потестировать какой-нибудь тулой возможности нет, а вот из репла вызвать функции и посмотреть результат вполне можно. Не то, чтобы это было очень удобно (особенно когда надо всякие сессии создать, прежде чем потестировать), но зато хотя бы как-то возможно.
Maksim
> Используется protocol-buffers, поэтому непосредственно эндпоинты потестировать какой-нибудь тулой возможности нет
любопытно
Alexander
так в аллегро телеграмм работает, а линкедин нет
Alexander
ну мне кажется что это взлетит, но на практике я не прове😼рял
Alexander
елки палки.. откуда тот смайл :/
Vladislav
то есть если у меня
B depends on A v1
C depends on A v2
D depends on B, C
то не соберётся?
Vladislav
А раньше могло собраться?
A64m
не, я про то когда у A одинаковые версии, а вот версии зависимостей разные
A64m
А раньше могло собраться?
емнип в самом первом демо http://blog.ezyang.com/2015/08/help-us-beta-test-no-reinstall-cabal/ это работало, а уж в планах точно было