@haskellru

Страница 1188 из 1551
Andrey
13.05.2018
12:35:19
ага, надо обработать Partial a

IC
13.05.2018
12:35:22
head нужно использовать только там где он действительно не падает, и есть инвариант
И писать в документации почему этот инвариант исполняется. А лучшая документация это код.

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
Alexander
13.05.2018
12:39:25
идеальный по мне в теории вариант это если жидкохацкель прицепить

тогда может и head там не нужен?
ну если инвариант есть, то какие проблемы с head?

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

вообще частичные функции это конечно плохо и лучше без них, чтобы по типу было видно о проблемах возможных (что невозможно вообще никак)

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
если не бросать явно исключения в чистом коде, уже станет намного лучше
в языке без асинхронных исключений может стало бы

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 для этого

в base вроде без callstack?
в base без, конечно

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
уже трейсы есть, у счастливых даже dwarf
Так в какой версии это есть? Как включить, чтобы было?

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
уже трейсы есть, у счастливых даже dwarf
разве есть красочные success stories уже про гномиков?

Google
Kirill
13.05.2018
13:24:00
никто не в курсе зачей пейсбук человека на GHC нанимает?

может лицекнига что-нибудь и полезное принесёт?

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

разве есть красочные success stories уже про гномиков?
про них 1.5 человека знают половина их это ВТ

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

Anatolii
13.05.2018
14:08:44
сделав \(Just h) -> h
А гхц тебе не скажет что ты не все заматчил?

kana
13.05.2018
14:10:41
а пурса гарантирует, что программист не забудет обработать Nothing?
не обработать сумму намного сложнее (ну то есть у меня в нормальном состоянии не бывает мысли не обработать какой-то кейс), чем результат head, поэтому я head не пользовался почти никогда, разве что с headMaybe, ручной разбор всегда

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
функция forall a. [a] -> a невозможна теоретически
А можно в двух словах, что бы это значило? Ну, то есть, слова я понимаю, а почему невозможно, и что будет, если так написать - неясно

Dmitry
13.05.2018
14:28:52
а как часто ты пишешь код вида \(Just x) -> f x?
fromJust иногда встречается в моём коде.

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
А можно в двух словах, что бы это значило? Ну, то есть, слова я понимаю, а почему невозможно, и что будет, если так написать - неясно
это по сути алгебра, то есть пара из двух функций для каждого кейса - () -> a и (a, [a]) -> a (тут правда все таки не []), для первого кейса общую функцию не написать

kana
13.05.2018
14:31:21
дело в том, что жс программисты тоже в своем коде уверены, поэтому не полагаются на систему типов)

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

Страница 1188 из 1551