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