Alexander
я бы сказал в 1995+
Cheese
1995—2017
Cheese
теперь же есть Раст
Alexander
пока в компилятор раста не вольют сравнительное число человеколет это под вопросом
Alexander
хотя по мне Раст гораздо приятнее
Anton
в 2018 - да
Посмотри на Telegram. Он такой плавный, а почему? Потому что многие медленные задачи отрабатываются именно на C.
Cheese
мы на С много пишем — файловые системы, драйверы. ну то есть опять ядро. да
Alexander
хм.. очень странное утверждение про телеграм
Alexander
у нас тоже на сях файловые системы распределенные си и Haskell
Cheese
Cheese
Alexander
ну приложение в котором общение по сети, чутка криптографии и GUI на 2.5 элемента
Alexander
у меня Google spreadsheet работает на сравнимой скорости в браузере
Alexander
а он на js
Alexander
и элементов там в разы больше
Alexander
в общем Haskell разумный язык прикладного уровня, а для системного код удобно генерить
Cheese
Alexander
там хотя бы gdb есть
Alexander
хотя граница веселой может быть
Alexander
особенно если с одной стороны хаскель, а с другой си, в кернел треде
A64m
A64m
да, но тяжелее, чем разработчика на нормальном языке
Anatolii
хм, что-то у меня аесон сломался
Anatolii
есть тест - парсит файлик, проверяет с expected
все работает отлично
Anatolii
хотя, кажется я понял
Anatolii
наверное я что-то в ToJSON которые руками писал поломал
Anatolii
Если убираю вот такой инстанс и дерайвлю 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
Anatolii
это я сократил до минимально воспроизводимого кейса
Anatolii
мне нужен toObject чтобы потом добавить поля дополнительные
Anatolii
я уже спать пойду - но если кто подкинет идею куда копать - буду очень благодарен
Anatolii
самое простое решение - это конечно сделать еще одну стрктуру которая будет с доп полями и там их заполнить
Anatolii
но хотелось бы понять что в этому случае пошло не так
Антон
Alexander
ты ж toJson вызываешь бесконечно
Alexander
toJson вызывает toObject который вызывает toJson
Alexander
в общем-то объект из-за ленивости оно сразу сделает, но если попробуешь его заматчить или значение достать, то будет печалька
Alexander
Maxim
Ночные вопросы. Представим, что у меня есть список xs. Я могу делать xs ^? ix 5. А могу filter f xs ^? xs
Как мне правильно сделать что-то типа xs ^? filtered f . ix 5
?
Вопрос скорее чисто из любопытства
Anatolii
ты ж toJson вызываешь бесконечно
Спасибо, точно пора спать идти, незнаю чем я думал когда писал это. Это мне чтобы доьавит полей надо делать обёртку? Чтобы вручную все старые поля не объявлять
Anatolii
Где-то когда юзал такой подход с toObject, так конечно наверняка был вложенная стрвктура
Alexander
Cheese
что-то мне затея с линзами не очень нравится уже
• 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))
Cheese
просто если заменить _1 на time = _1
Алексей
Я б тупо 5 параметров сделал.
Cheese
десять раз их туда-сюда передавать... скучно
Cheese
захотел сделать красиво
Cheese
вот так сработало
time :: Lens' _ Time
time = _3
ЧH
а почему в хаскеле -23 div 10 == -2?
ЧH
деление вроде целочисленное...
ЧH
Как же так то ребята
ЧH
Я думал математика... все дела , по серъезному все...
Kirill
потому что это - (23 div 10)
Kirill
а вариантов больше чем 1, нечего тут про серьёзную математику задвигать:
λ> (-23) `quot` 10
-2
λ> (-23) `div` 10
-3
ЧH
-23 div 10 ==- 3
-23 % 10 == 7
ЧH
у нормальных людей вощет
ЧH
ох лол это еще и унарные операторы имеют приоритет ниже функций
ЧH
Кирилл
Кирилл
ЧH
потому что так работает целочисленное деление на отрицательных числах
Alexander
-23+3=20 делится на 10
ЧH
проверяем 10*(-3)+7=-23
Oleg
У тебя ведь по паре операций для каждой семантики
Oleg
Иногда нужно сделать как раз с дистрибутивной инверсией, и приходится костылитт
Cheese
потому что в Хаскеле по умолчанию нет отрицательных литералов и унарных операторов
Cheese
есть синтаксический сахар, превращающий - в negate, но, как видите, он не очевидно работает
ЧH
ок разобрался, знач нормально все реализовано. с делением.
Cheese
всё как доктор прописал
Cheese
div, mod, quot, rem
Timofey
Мене, текел, фарес
Anatolii
не понял вопроса
я этим кодом пытался добиться следующего - взять объект json текущего типа и к нему прибавить парочку полей. Вот я теперь думаю как мне это правильно сделать
Alexander
data QQ a = QQ a NewFields?
Alexander
и инстансы для них
A64m
или-паттерны таки немного продвинулись (снова попали на обсуждение комитета) https://mail.haskell.org/pipermail/ghc-steering-committee/2018-June/000601.html
A64m
а то автор был уже, похоже, на вышеупомянутой границе боли и унижения, которые он мог себе позволить https://github.com/ghc-proposals/ghc-proposals/pull/43#issuecomment-393777358
Anatolii
data QQ a = QQ a NewFields?
ну я так уже тоже подумал, проблема в том что там есть еще вложенные поля для которых мне тоже надо такое делать