
kana
31.05.2018
20:54:12

Denis
31.05.2018
20:54:51

Yuriy
31.05.2018
20:56:15
в хаскеле тип для внутренностей одной функции как-то чуждо смотрится

Антон
31.05.2018
20:56:42

Google

kana
31.05.2018
20:57:12
можно просто линзы _1/_2/_3 проименовать в говорящие имена
f :: State (Int, Int, Int) ()
f = do
a += 1
b *= 2
c -= 3
where
(a, b, c) = (_1, _2, _3)

Yuriy
31.05.2018
20:57:54

Ilya
31.05.2018
20:58:38

Yuriy
31.05.2018
20:59:31
по крайней мере один из них врёт

Антон
31.05.2018
20:59:40

Alexander
31.05.2018
21:00:27
про то, что в Haskell в отличии от rust есть GC уже написали?
а то лень читать выше

A64m
31.05.2018
21:01:00
плюсы хаскеля: есть гц

Alexander
31.05.2018
21:01:12
а ну хорошо

Антон
31.05.2018
21:01:15

Alexander
31.05.2018
21:01:55
или микроконтроллеры?

Google

A64m
31.05.2018
21:02:17
зачем языки "системного уровня" в 99.98% задач?

Антон
31.05.2018
21:02:21
ядро пилишь?
А на C только только ядра и микроконтроллеры пилить?

Alexander
31.05.2018
21:02:32
я бы сказал в 1995+

Yuriy
31.05.2018
21:03:00
1995—2017
теперь же есть Раст

Alexander
31.05.2018
21:03:58
пока в компилятор раста не вольют сравнительное число человеколет это под вопросом
хотя по мне Раст гораздо приятнее

Антон
31.05.2018
21:04:28
в 2018 - да
Посмотри на Telegram. Он такой плавный, а почему? Потому что многие медленные задачи отрабатываются именно на C.

Yuriy
31.05.2018
21:05:11
мы на С много пишем — файловые системы, драйверы. ну то есть опять ядро. да

Alexander
31.05.2018
21:05:29
хм.. очень странное утверждение про телеграм
у нас тоже на сях файловые системы распределенные си и Haskell

Yuriy
31.05.2018
21:05:58

Alexander
31.05.2018
21:06:34
ну приложение в котором общение по сети, чутка криптографии и GUI на 2.5 элемента
у меня Google spreadsheet работает на сравнимой скорости в браузере
а он на js

Антон
31.05.2018
21:07:10

Alexander
31.05.2018
21:07:15
и элементов там в разы больше
в общем Haskell разумный язык прикладного уровня, а для системного код удобно генерить

Google

Yuriy
31.05.2018
21:08:36

Alexander
31.05.2018
21:10:44
там хотя бы gdb есть
хотя граница веселой может быть
особенно если с одной стороны хаскель, а с другой си, в кернел треде

A64m
31.05.2018
21:23:04

Антон
31.05.2018
21:23:51

A64m
31.05.2018
21:24:46
да, но тяжелее, чем разработчика на нормальном языке

Anatolii
31.05.2018
21:28:51
хм, что-то у меня аесон сломался
есть тест - парсит файлик, проверяет с expected
все работает отлично
хотя, кажется я понял
наверное я что-то в ToJSON которые руками писал поломал
Если убираю вот такой инстанс и дерайвлю ToJSON, то все ок
Но вот если сделать такой инстанс то начинается беда какая-то, подвисает на encode, просто выжирает 1 ядро и висит
toObject :: ToJSON a => a -> Object
toObject a = case toJSON a of
Object o -> o
_ -> error "toObject: value isn't an Object"
instance ToJSON X where
toJSON x = Object $
toObject x
это я сократил до минимально воспроизводимого кейса
мне нужен toObject чтобы потом добавить поля дополнительные
я уже спать пойду - но если кто подкинет идею куда копать - буду очень благодарен
самое простое решение - это конечно сделать еще одну стрктуру которая будет с доп полями и там их заполнить
но хотелось бы понять что в этому случае пошло не так

Антон
31.05.2018
21:54:14

Alexander
31.05.2018
21:56:17
ты ж toJson вызываешь бесконечно

Google

Alexander
31.05.2018
21:56:37
toJson вызывает toObject который вызывает toJson
в общем-то объект из-за ленивости оно сразу сделает, но если попробуешь его заматчить или значение достать, то будет печалька

Maxim
31.05.2018
21:57:55
Ночные вопросы. Представим, что у меня есть список xs. Я могу делать xs ^? ix 5. А могу filter f xs ^? xs
Как мне правильно сделать что-то типа xs ^? filtered f . ix 5
?
Вопрос скорее чисто из любопытства

Anatolii
31.05.2018
21:59:46
ты ж toJson вызываешь бесконечно
Спасибо, точно пора спать идти, незнаю чем я думал когда писал это. Это мне чтобы доьавит полей надо делать обёртку? Чтобы вручную все старые поля не объявлять
Где-то когда юзал такой подход с toObject, так конечно наверняка был вложенная стрвктура

Alexander
31.05.2018
22:05:19

Yuriy
31.05.2018
22:16:06
что-то мне затея с линзами не очень нравится уже
• Couldn't match type ‘Identity’ with ‘Const Time’
Expected type: Getting
Time (Chains, Map k0 a0, Time, Map Time (Set Work)) Time
Actual type: (Time -> Identity Time)
-> (Chains, Map k0 a0, Time, Map Time (Set Work))
-> Identity (Chains, Map k0 a0, Time, Map Time (Set Work))
просто если заменить _1 на time = _1

Pineapple
31.05.2018
22:17:08
Я б тупо 5 параметров сделал.

Yuriy
31.05.2018
22:19:56
десять раз их туда-сюда передавать... скучно
захотел сделать красиво
вот так сработало
time :: Lens' _ Time
time = _3

qq
01.06.2018
06:11:05
а почему в хаскеле -23 div 10 == -2?
деление вроде целочисленное...
Как же так то ребята
Я думал математика... все дела , по серъезному все...

Kirill
01.06.2018
06:21:45
потому что это - (23 div 10)
а вариантов больше чем 1, нечего тут про серьёзную математику задвигать:
λ> (-23) `quot` 10
-2
λ> (-23) `div` 10
-3

qq
01.06.2018
06:25:12
-23 div 10 ==- 3
-23 % 10 == 7

Google

qq
01.06.2018
06:25:25
у нормальных людей вощет
ох лол это еще и унарные операторы имеют приоритет ниже функций

KDeveloper ??
01.06.2018
06:27:26

qq
01.06.2018
06:28:54
потому что так работает целочисленное деление на отрицательных числах

Alexander
01.06.2018
06:29:16
-23+3=20 делится на 10

qq
01.06.2018
06:30:25
проверяем 10*(-3)+7=-23

Oleg
01.06.2018
06:44:19
У тебя ведь по паре операций для каждой семантики
Иногда нужно сделать как раз с дистрибутивной инверсией, и приходится костылитт

Yuriy
01.06.2018
06:47:56
потому что в Хаскеле по умолчанию нет отрицательных литералов и унарных операторов
есть синтаксический сахар, превращающий - в negate, но, как видите, он не очевидно работает

qq
01.06.2018
06:50:05
ок разобрался, знач нормально все реализовано. с делением.

Yuriy
01.06.2018
06:50:41
всё как доктор прописал
div, mod, quot, rem

Timofey
01.06.2018
07:07:56
Мене, текел, фарес