Alexander
лучше у @JelF1337 спрашивай, я к fix лояльно отношусь
Alexander
по мне - нормально
Denis
а можно как-то помодульно говорить “инлайнить всё”?
кана
ну я знаю, ты просто как-то сказал, что код для генерации данный лучше не через fix делать, вот я искал кейс для fix тогда
Alexander
но почему fix а не явная рекурсия?
Alexander
@catamorphism была опция инлайнить все
Alexander
и можнов {-# OIPTIONS_GHC её
Denis
Alexander
найдешь напиши тут
Alexander
а то я забыл
кана
но почему fix а не явная рекурсия?
давно выработалась привычка не пробрасывать одни и те же аргументы в рекурсии и я начал делать go-функции
parsePrompt :: Read a => String -> IO a
parsePrompt text = go where
go = readEither <$> prompt text >>= \case
Right value -> pure value
Left error -> do
putStrLn error
go
очевидно что смысла в имени нет и намного логичнее это делать как-то анонимно. fix как раз дает эту анонимную рекурсию
Denis
fix - отличный способ сделать обскурнее на ровном месте
eahqzsr
Некоторые думают что FP это сделать обскурнее на ровном месте.
Зигохистоморфный
promt text >>= either pure ((repeat <<) . putStrLn)
eahqzsr
Монады это сделать обскурнее на ровном месте
eahqzsr
и тп.
кана
adam
Мне понравился пример
(<$>) = over Cofree . ana . (<<< unpack) . first
Denis
я вот и не могу найти, про развертки что-то видел, но не более
Alexander
а точно
A64m
fspecialise-aggressively
она недокуметированная вроде
Антон
Oleg
Oleg
нет реюзабельности - прозрачность не нужна
eahqzsr
Что скажете насчёт Haxl?
Oleg
но только не через афинное растоговно вместо линтипов
Антон
Антон
Oleg
(ответ: ʁɐʞɐʞин)
Антон
Oleg
А "афинные типы" привязаны к аллокации, поэтому всё, что не выражается через RAII идёт боком
Антон
Антон
Aliester
Oleg
Aliester
sherzod
Я, наверное, поздновато, но это ж не зависимые типы нихрена.
а что это тогда?)
я совсем мало не знаком с темой, сужу по начальному знакомству с идрис
в моем нестрогом понимании это стирание границы между типами и значениями
в частности, пример с vect в идрисе почти везде в начальных вещах упоминается, он выразим через плюсовые шаблоны
Ю ли я? 🤔
Эта выразимость заканчивается, как только параметр шаблона перестаёт быть целочисленной константой времени компиляции.
Ю ли я? 🤔
Т. е. даже int foo = readln(); array<int, foo> bar; нельзя. С завтипами - можно
sherzod
хм.. ну мне это пока предстоит в будущем
вообще странно, что есть нечто рантаймовое что нам может быть интересно
Oleg
Denis
как только ты начинаешь работать с вектором неизвестной длины - длина попадает в рантайм
Oleg
Ну и конечно, вся эта фигня одноуровневая, у тебя не может быть завтипа, зависящего от значения переменной завтипа
sherzod
спасибо
ну просто заглядывая вперёд, что полезного мы можем извлечь в компайлтайме имея в рантайме?
int foo = readln(); array<int, foo> bar;
Oleg
Ну и почти что вследствие нестираемости сигма-тип невыразим. О чём тут разговаривать
Oleg
Ну или ладно, я не знаю последних тенденций в темплейтах, может стал выразим уже
Ю ли я? 🤔
Oleg
A64m
sherzod
sherzod
всё. понял.
sherzod
надо подумать про выразимость в плюсах тогда..
A64m
Oleg
Щас бы на ЛОР про завтипы читать
Антон
sherzod
Антон
Oleg
Ну завтипы Haskell vs C++ это конечно битва титанов, практически, как ФП javascript vs python
Ю ли я? 🤔
Вы так говорите, будто это что-то плохое
A64m
Антон
Антон
Ю ли я? 🤔
В crates.io за ~три года уже больше пакетов нахреначили, чем в hackage за всё время его существования
A64m
Ю ли я? 🤔
Не понимаю, к чему это сообщение, если речь была о Rust и Haskell.
Aliester