
Andrey
13.05.2018
12:35:19
ага, надо обработать Partial a

IC
13.05.2018
12:35:22

Alexander
13.05.2018
12:35:27
по врапперов типа NonEmpty на всех не напасешься

A64m
13.05.2018
12:35:29
да и нонэмпти дурацкое

Google

Andrey
13.05.2018
12:35:36
unsafePartial $ fromJust

Alexander
13.05.2018
12:35:38
+
вот линзы - правильный NonEmpty/safeHead

IC
13.05.2018
12:36:24
partial "impossible happened!" $ head foos

Alexander
13.05.2018
12:36:41
вот это вообще ничем не лучше чем head
игры в страусов

Andrey
13.05.2018
12:37:02
+

A64m
13.05.2018
12:37:07
в линзах и эксепшн нормальный, за счет стектрейса на имплицитах

Alexander
13.05.2018
12:37:20
с head и инвариантами проблема в том, что инварианты могут не быть настоящими и в будущем их не будеи
или код используют, скопируют в окружение, где его нетц

A64m
13.05.2018
12:37:37
ну и в каком-то смысле этот имплицитный стек показывает в сигнатуре что функция частичная

Alexander
13.05.2018
12:37:45
в этом месте надо думать о tradeoff
я к тому, что часто выражаемое мнение "у нас prelude без частичных функций" - это не очень разумно

Google

Andrey
13.05.2018
12:39:07

Alexander
13.05.2018
12:39:25
идеальный по мне в теории вариант это если жидкохацкель прицепить

A64m
13.05.2018
12:39:56
если сейчас на время компиляции жалуются, что они будут про ликвидхаскель говорить

Alexander
13.05.2018
12:40:17
хаха

A64m
13.05.2018
12:40:54
но лучше для этого действительно ничего не придумали пока

Alexander
13.05.2018
12:41:27
с lh можно и быстро и безопасно и без ада в value level
вообще частичные функции это конечно плохо и лучше без них, чтобы по типу было видно о проблемах возможных (что невозможно вообще никак)

Ilya
13.05.2018
12:46:30

Alexander
13.05.2018
12:46:53
отсутствие ленивости и асинхронных исключений
и очень сознательные разработчики
и тотальность
и.е. завтипов самих по себе не хватит

Yuriy
13.05.2018
12:47:52

Alexander
13.05.2018
12:48:41
не сильно
вон в расте try! на каждом шагу и все живы
и match()
или как там разврапливающий метод зовётся
хотя у них вроде не все довольны

Dmitry
13.05.2018
12:51:33
С head проблема в том, что нет диагностики вменяемой. У тебя тупо программа падает с "Prelude.head: empty list" и ищи-свищи, какой из сотни head'ов выстрелил.

Google

A64m
13.05.2018
12:51:35

Alexander
13.05.2018
12:52:20

A64m
13.05.2018
12:52:26
можно сделать head c нормальным эксепшеном (уже сделан)

Dmitry
13.05.2018
12:52:45
А как сделать? Я только что на 8.0.2 проверял

Alexander
13.05.2018
12:52:57
в base вроде без callstack?

A64m
13.05.2018
12:53:08
xs ^?! _head

Alexander
13.05.2018
12:53:29
это с линзами

A64m
13.05.2018
12:53:31
но для 8.0 наверное слишком старый lens для этого

Alexander
13.05.2018
12:54:00
была очередная прелюдия с колстеками

Yuriy
13.05.2018
12:54:22
стэктрэйсы (которые HasCallStack из 7.10), кстати, заканчиваются на первом же классе

A64m
13.05.2018
12:56:11
на практике еще раньше, где можно и не заканчивать

Alexander
13.05.2018
12:56:51
интересно как там состояние с dwarf изменилось за последние 2 года

Dmitry
13.05.2018
12:57:21

Alexander
13.05.2018
12:58:42
libdw на системе иметь и с собрать с каким-то флагом ghc. на память не помню

A64m
13.05.2018
12:59:06
-g
емнип

Alexander
13.05.2018
13:10:40
ну гхц должен быть готов
не уверен что стековый собран верно

Kirill
13.05.2018
13:23:12

Google

Kirill
13.05.2018
13:24:00
никто не в курсе зачей пейсбук человека на GHC нанимает?
может лицекнига что-нибудь и полезное принесёт?

Alexander
13.05.2018
13:24:53
могу спросить они мне емейл писали я ещё не ответил

Alexander
13.05.2018
13:56:33
и да, а как вообще можно дебажить hasql?
ResultError (RowError 0 (ValueError "End of input"))

Alexander
13.05.2018
14:01:06
парсер ждёт больше, чем пришло

Alexander
13.05.2018
14:01:19
а где именно?
в столбце или в массиве или в композите?

Alexander
13.05.2018
14:01:32
кстати как с select * в хаскле работать я не знаю

Alexander
13.05.2018
14:02:06
надо бы написать свою orm

Alexander
13.05.2018
14:03:18
вообще надо high level интерфейс для postgresql-wire

kana
13.05.2018
14:07:11

Anatolii
13.05.2018
14:08:44

kana
13.05.2018
14:10:41

Anatolii
13.05.2018
14:11:56
Тогда не понял к чему был пример "Ilya Pershin:
сделав \(Just h) -> h"

kana
13.05.2018
14:12:31

Anatolii
13.05.2018
14:12:52
Мы ж в хаскель за этим и пришли - чтобы компилятор нам помогал, а вот с этими Хэд и тэил из прелюдии начинает кложой пахнуть
Ну вот у меня с этим флагом проект всегда собирается на и -Werror

Google

Anatolii
13.05.2018
14:14:00
А внутри лямбды он ругается?

kana
13.05.2018
14:15:53
нет

Alexander
13.05.2018
14:15:56
в lambdacase или анонимной функции не будет
map (\(Just x) -> соберется

Ilya
13.05.2018
14:22:08
нет
а в идрисе как с этим? вроде там есть totality checker?
я за head :: [a] -> Maybe a, но только если компилятор реально будет бить по руками во всех случаях, когда Nothing не обработан. А иначе это то же самое, что и частичный head, имхо

kana
13.05.2018
14:23:42
я представить не могу, что кто-то так будет писать
мало того, у [a] -> Maybe a есть и теоретическое обоснование, которое тоже важно
функция forall a. [a] -> a невозможна теоретически

Ilya
13.05.2018
14:26:44
а как часто ты пишешь код вида \(Just x) -> f x?
я и head не вызываю, если не уверен, что пустого списка не будет. и что с того. это разговор в плоскости best practices. ты не можешь представить, а кто-то возьмёт и напишет этот unJust, и компилятор съест.

kana
13.05.2018
14:27:41
ну мой поинт был про то, что шанс заюзания head намного выше, чем шанс заюзания \(Just x) -> g

Александр
13.05.2018
14:28:00

Dmitry
13.05.2018
14:28:52

Alexander
13.05.2018
14:30:06

Ilya
13.05.2018
14:30:08
fromJust иногда встречается в моём коде.
правильно. потому что иногда программист уверен, что значение Nothing не придёт, и тогда fromJust оправдан. точно так же иногда программист уверен, что пустого списка не будет изначально, и тогда частичный head оправдан

Alexander
13.05.2018
14:30:12
кроме bottom

kana
13.05.2018
14:30:24

Ilya
13.05.2018
14:30:33

kana
13.05.2018
14:31:21
дело в том, что жс программисты тоже в своем коде уверены, поэтому не полагаются на систему типов)
проблемы две:
- иметь правильный тип
- правильно обработать значение
первая имхо приоритетнее второй, поэтому [a] -> Maybe a уже решение. Остается проблема обработки, которую хаскель не решает (и даже ворнинг не всегда показывает)