Alexander
+
Alexander
вот линзы - правильный NonEmpty/safeHead
IC
partial "impossible happened!" $ head foos
Alexander
вот это вообще ничем не лучше чем head
Alexander
игры в страусов
Andrey
+
A64m
в линзах и эксепшн нормальный, за счет стектрейса на имплицитах
Alexander
с head и инвариантами проблема в том, что инварианты могут не быть настоящими и в будущем их не будеи
Alexander
или код используют, скопируют в окружение, где его нетц
A64m
ну и в каком-то смысле этот имплицитный стек показывает в сигнатуре что функция частичная
Alexander
в этом месте надо думать о tradeoff
Alexander
я к тому, что часто выражаемое мнение "у нас prelude без частичных функций" - это не очень разумно
Andrey
Alexander
идеальный по мне в теории вариант это если жидкохацкель прицепить
A64m
если сейчас на время компиляции жалуются, что они будут про ликвидхаскель говорить
Alexander
хаха
A64m
но лучше для этого действительно ничего не придумали пока
Alexander
с lh можно и быстро и безопасно и без ада в value level
Alexander
вообще частичные функции это конечно плохо и лучше без них, чтобы по типу было видно о проблемах возможных (что невозможно вообще никак)
Ilya
Alexander
отсутствие ленивости и асинхронных исключений
Alexander
и очень сознательные разработчики
Alexander
и тотальность
Alexander
и.е. завтипов самих по себе не хватит
Alexander
не сильно
Alexander
вон в расте try! на каждом шагу и все живы
Alexander
и match()
Alexander
или как там разврапливающий метод зовётся
Alexander
хотя у них вроде не все довольны
Dmitry
С head проблема в том, что нет диагностики вменяемой. У тебя тупо программа падает с "Prelude.head: empty list" и ищи-свищи, какой из сотни head'ов выстрелил.
A64m
Alexander
A64m
можно сделать head c нормальным эксепшеном (уже сделан)
Dmitry
А как сделать? Я только что на 8.0.2 проверял
Alexander
в base вроде без callstack?
A64m
xs ^?! _head
Alexander
это с линзами
A64m
но для 8.0 наверное слишком старый lens для этого
A64m
Alexander
была очередная прелюдия с колстеками
Cheese
стэктрэйсы (которые HasCallStack из 7.10), кстати, заканчиваются на первом же классе
A64m
на практике еще раньше, где можно и не заканчивать
Alexander
интересно как там состояние с dwarf изменилось за последние 2 года
Alexander
libdw на системе иметь и с собрать с каким-то флагом ghc. на память не помню
A64m
-g
A64m
емнип
Alexander
ну гхц должен быть готов
Alexander
не уверен что стековый собран верно
Kirill
никто не в курсе зачей пейсбук человека на GHC нанимает?
Kirill
может лицекнига что-нибудь и полезное принесёт?
Alexander
могу спросить они мне емейл писали я ещё не ответил
Alexander
Alexander
и да, а как вообще можно дебажить hasql?
Alexander
ResultError (RowError 0 (ValueError "End of input"))
Alexander
парсер ждёт больше, чем пришло
Alexander
а где именно?
Alexander
в столбце или в массиве или в композите?
Alexander
кстати как с select * в хаскле работать я не знаю
Alexander
надо бы написать свою orm
Alexander
вообще надо high level интерфейс для postgresql-wire
кана
кана
Anatolii
Тогда не понял к чему был пример "Ilya Pershin:
сделав \(Just h) -> h"
кана
Anatolii
Мы ж в хаскель за этим и пришли - чтобы компилятор нам помогал, а вот с этими Хэд и тэил из прелюдии начинает кложой пахнуть
Anatolii
Ну вот у меня с этим флагом проект всегда собирается на и -Werror
Anatolii
А внутри лямбды он ругается?
кана
нет
Alexander
в lambdacase или анонимной функции не будет
Alexander
map (\(Just x) -> соберется
Ilya
нет
а в идрисе как с этим? вроде там есть totality checker?
Ilya
я за head :: [a] -> Maybe a, но только если компилятор реально будет бить по руками во всех случаях, когда Nothing не обработан. А иначе это то же самое, что и частичный head, имхо
кана
кана