@haskellru

Страница 1214 из 1551
Aleksey
22.05.2018
06:10:40
комбинатор запилить нельзя? f (Pat1 a) = ... f (Pat2 b) | True = ... f _ = ... -- переделываем в mkF g _ _ (Pat1 a) = g a mkF _ h _ (Pat2 b) | True = h b mkF _ _ def _ = def -- и потом используем f = mkF id id "foo"

Если паттерны сложные, но сама конструкция матчинга применима более двух раз, то комбинатор должен подойти

Если "тел" много, то можно record с функциями сделать

IC
22.05.2018
06:12:55
а можно как-то в одном модуле выключить все варнинги?
Лучше перестать считать их ошибками, а не совсем скрывать: -Wwarn

Google
Aleksey
22.05.2018
06:15:16
если тела более-менее отличаются, то да

Если функций много, то можно и рекорд сделать data F = F { handlePat1 :: a -> c , handlePat2 :: b -> c , default :: c } use :: F -> _ -> c use f (Pat1 a) = handlePat1 f a ...

В данном случае значения типа F будут разными "функциями" с одинаковым механизмом разбора входного значения

Aleksey
22.05.2018
06:34:26
Да, точно "оксфордские скобки"! Спасибо :)

Yuriy
22.05.2018
08:07:57
а UnicodeSyntax разрешает использовать ⟦ ⟧ вместо составных скобок?

Gleb
22.05.2018
08:47:27
/stat@combot

Combot
22.05.2018
08:47:28
combot.org/chat/-1001043143583

Gleb
22.05.2018
08:47:29
/stat@combot

Combot
22.05.2018
08:47:32
combot.org/chat/-1001043143583

Alexander
22.05.2018
08:55:56
а как правильно парсить штуки, которые зависят от того, что будет дальше, вот прочитал я токен, а чтобы понять, что он такое мне нужно распарсить дальше

Google
Dmitry
22.05.2018
08:59:15
В несколько проходов

Вычислять новое АСТ по результатам частичной интерпретации

(см. раскрытие макр)

Alexander
22.05.2018
09:00:18
ой, не хочется

Dmitry
22.05.2018
09:00:23
У

У тебя нет выбора )

Alexander
22.05.2018
09:00:33
давай я пример приведу

ну я может неверно объяснил

Kirill
22.05.2018
09:01:59
а завернуть в 1 парсер не канает?

Alexander
22.05.2018
09:02:03
начну с простого, у меня есть Token!foo, могу ли я человеческим и быстрым образом вернуть что-то другое если в теле токена у меня !

вообще интерпретация Token может зависеть от того, что именно там в foo напарсилось, но на это наверное можно и забить

Dmitry
22.05.2018
09:03:44
Ну мало данных - как ты парсишь, откуда вернуть

Alexander
22.05.2018
09:04:57
есть строка текста, есть аттопарсер, мне нужно вернуть структуру типа [SP] где SP = S Text | P Token Foo

желательно максимально эффективно

а если это дело без backtracing-а можно сделать то совсем прекрасно

Dmitry
22.05.2018
09:07:21
Ну. По опыту, как только у тебя от токенизации и близкого к тому перешло к парсингу - аттопарсек в сторону, и парсишь по настоящему

Alexander
22.05.2018
09:08:16
по настоящему это как?

Dmitry
22.05.2018
09:09:13
Аттопарсеком получаешь поток токенов, и дальше его уже парсишь. Или каким нибудь парсер генератором, или вручную

В твоём случае выглядит похоже на то, что можно обойтись аттопарсеком - но сходу не могу сообразить, как

Ну например - внутри парсера запустить парсинг токена

Google
Dmitry
22.05.2018
09:10:52
И вернуть что-то в зависимости от результатов

Те считать Token!foo

Распарить (внутри) его другим парсером

Alexander
22.05.2018
09:11:52
это разумно

Dmitry
22.05.2018
09:12:00
Вернуть результат в зависимости от того, что напарсилось

Alexander
22.05.2018
09:15:05
да в общем-то верно

т.е. вообще тупо сделать Tokenize который вернёт мне [(TokenType, Int, Int)] ?

или вообще [(Int, Int)]

Dmitry
22.05.2018
09:19:25
Ну это зависит от того, что ты делаешь, пока не совсем очевидно

Hermann
22.05.2018
09:21:33
anyone know SePi language?

Alexander
22.05.2018
11:06:27
@The_h3rmann I doubt, never heard about it on this channel

так у меня есть data Funky a b = This a | That b | ThisOrThat (a,b) есть что-то готовое для такой странной вещи?

Alexander
22.05.2018
11:09:03
да, нашел

теперь надо решить хочу ли я тащить пакет

Alexander
22.05.2018
11:18:46
нет, or

IC
22.05.2018
11:18:58
Тогда откуда там кортеж?

Alexander
22.05.2018
11:19:02
в общем у меня есть штука, которую можно распарсить и так и так

Google
Alexander
22.05.2018
11:19:23
и я не знаю, что это, я конструирую все возможные элементы, и пусть там наверху решают

т.е. "or" там по смыслу

по структуре, конечно "and"

IC
22.05.2018
11:19:44
с - семантика

Alexander
22.05.2018
11:19:50
+

IC
22.05.2018
11:20:11
Ambiguous a b

Alexander
22.05.2018
11:22:11
+

Dmitry
22.05.2018
12:05:19
Есть куча отрезков на прямой, они могут пересекаться. Надо найти суммарную покрытую длину.

Можете подсказать, есть готовые библиотеки для этого?

Yuriy
22.05.2018
12:06:54
Подскажи, удалось найти?
нет, я решил другим способом

я сначала хотел минимизировать пересечения, потом перестроил модель так, чтобы пересечений вообще не было

Dmitry
22.05.2018
12:08:45
Да, так было бы хорошо. Ладно, пойду искать

Алексей Ayaye :)
22.05.2018
12:09:16
Да, так было бы хорошо. Ладно, пойду искать
да вроде алгоритм несложный

Yuriy
22.05.2018
12:09:38
можно строить индекс по началам и концам, можно как-нибудь R-деревья поиспользовать, наверно

Dmitry
22.05.2018
12:10:24
Да уже нашёл: https://hackage.haskell.org/package/SegmentTree-0.3/docs/Data-SegmentTree.html

да вроде алгоритм несложный
Да я уже был готов перебором написать, просто зачем, если задача кажется достаточно типовой. В результате нашёл либу, кажется, подходит.

IC
22.05.2018
12:45:38
там cabal-install случаем не научили ещё out of tree сборку?

> We do take a —work-dir to specify the relative position of .stack-work. > Due to limitations in Cabal, we cannot make this an absolute directory.

dimiii
22.05.2018
12:57:21
Помогите найти статью в вики. Ищу теорему/утверждение о том, что ленивая стратегия вычислений и тотальность функций помогают в анализе програм (завершимости?). Надеюсь не очень переврал.

Google
Yuriy
22.05.2018
13:19:08
а тотальность функций и завершимость программ — это одно и то же

dimiii
22.05.2018
13:23:22
Уфф, нашел, переврал конечно, не помню в каком контексте я делал подобные выводы, но искал это https://en.wikipedia.org/wiki/Walther_recursion

Yuriy
22.05.2018
13:27:23
разве что в Liquid Haskell тотальность означает, что функция готова принять любое значение аргумента, но не завершимость, а завершимость как-то ещё названа

Dmitry
22.05.2018
13:31:39
А если ограничить завершимость практически -- например, 1 млрд вызовов функций от main при размере входа в X попугаев, эта-то задача разрешима?

dimiii
22.05.2018
13:32:38
А если ограничить завершимость практически -- например, 1 млрд вызовов функций от main при размере входа в X попугаев, эта-то задача разрешима?
По-моему, была идея в использовании Walther_recursion и последовательной аппроксимации для решения вопроса о завершимости, для практического использования

Yuriy
22.05.2018
13:32:53
да, за 1 млрд шагов разрешима

Dmitry
22.05.2018
13:33:27
Ну с помощью методов суперкомпиляции можно часть шагов свернуть

Yuriy
22.05.2018
13:34:40
можно и не свернуть. нет гарантии

Dmitry
22.05.2018
13:34:40
Ну ок, дадим проверяльщику 1 час времени, грубо говоря. Много ли есть такого практического кода, который бы он не успел за это время проверить?

Просто проблема завершимости кажется какой-то теоретической, как будто не применимой к обычным оперденям.

Yuriy
22.05.2018
13:38:50
да. любой код, работающий больше 1 часа

в оперденях да, а на бэкенде вполне могут быть задачи на несколько часов

да, за 1 млрд шагов разрешима
поправка: не менее чем за 1 млрд в худшем случае

кроме того, не очень понятно, зачем тебе знание о завершимости только для одного набора входных данных

кроме того, не очень понятно, зачем тебе знание о завершимости только для одного набора входных данных, причём после того, как программа для этого набора уже отработала

ответ на вопрос о разрешимости интересен до запуска

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