
Alexander
13.07.2018
21:30:01
https://gist.github.com/qnikst/785feaecb43b032ef21415576d85209d
через nested types без гадтов наверное не получится
правда elim там уже фиг напишешь так просто (скорее всего)

Index
13.07.2018
21:38:45
Я сделал штуковину https://hackage.haskell.org/package/unwrapped-functors-0.1.0.0/docs/Data-Functor-Unwrapped.html

Google

Index
13.07.2018
21:39:45
Она достаточно тупая, но если взять Rec из vinyl и переписать там тип элементов с f r на Unwrapped f r, то получаются даже сносные гетерогенные списки
Ну то есть могут они строго меньше, но простые юз-кейсы становятся намного приятнее, например не нужно в Identity всё заворачивать
или в Const
я вот применил Product (Const x) Identity и получил для каждого элемента a тьюпл (x, a)
в более интересных новостях, добавил поддержку опциональных параметров в https://hackage.haskell.org/package/named-0.2.0.0/docs/Named.html

kana
13.07.2018
23:06:43
в принципе получается это, только вместо конкретных Head/Shift получается семейство разных Head/Shift, параметризованное фантомом, которое находится в типе rope

Alexander
14.07.2018
04:35:26
не хватит, там они частично применены

Dmitry
14.07.2018
04:59:14

patinity
14.07.2018
06:03:52

Dmitry
14.07.2018
06:06:51
меньше зависимостей - круче, имеете в виду?
Нет, я имел в виду, что в Haskell нет синтаксиса для именованных аргументов. И можно было бы попатчить GHC, чтобы ввести этот синтаксис (предварительно убедив сотню людей, что именно этот синтаксис для именованных аргументов правильный). Но тот факт, что это можно реализовать средствами самого языка, означает, что язык довольно выразительный, что даже казалось бы синтаксическую фичу, которую никак нельзя иметь не улучшая компилятор специально для этой фичи, можно реализовать на самом языке. Но и да, в библиотеке примерно 0 зависимостей, так что никакого оверхеда)


shadowjack
14.07.2018
06:14:16
Нет, я имел в виду, что в Haskell нет синтаксиса для именованных аргументов. И можно было бы попатчить GHC, чтобы ввести этот синтаксис (предварительно убедив сотню людей, что именно этот синтаксис для именованных аргументов правильный). Но тот факт, что это можно реализовать средствами самого языка, означает, что язык довольно выразительный, что даже казалось бы синтаксическую фичу, которую никак нельзя иметь не улучшая компилятор специально для этой фичи, можно реализовать на самом языке. Но и да, в библиотеке примерно 0 зависимостей, так что никакого оверхеда)
А ведь ещё есть QuasiQuotes
Страшно подумать что можно слелать

Google

Dmitry
14.07.2018
06:23:54
А ведь ещё есть QuasiQuotes
Думаю, что тащить QuasiQuotes на каждый вызов функции довольно неудобно. Поэтому именно для этой задачи неудобно. Я видел решение Extensible Records на квази-квотах, и это выглядело довольно страшненько... Как по мне, квазиквотеры подходят для чего-нибудь в духе: вставить кусок HTML в код с интерполяцией и заодно провести компайл-тайм валидацию HTML (кстати, причём именно такой библиотеки нет).

Yuriy
14.07.2018
06:50:09

Vladimir
14.07.2018
08:02:41
всем привет! Кто может посоветовать годную литературу по фп на русском языке желательно. И также материал по Haskell для начинающих?

Yuriy
14.07.2018
08:16:47

Dmitry
14.07.2018
08:17:44

Yuriy
14.07.2018
08:18:04
если кто не в курсе, у нас целое сообщество
с сайтом, чатами, форумами, твиттером, прочими ресурсами
и даже митапами

Vladimir
14.07.2018
08:19:57

Yuriy
14.07.2018
08:20:28
а само сообщество — это люди вокруг тебя
у него нет единственной точки входа, мы везде
хотя сайт ruhaskell.org — одна из точек входа
и этот чат тоже

Svyatoslav
14.07.2018
08:31:40

Vladimir
14.07.2018
08:33:11

Алексей Ayaye :)
14.07.2018
08:33:49

The mirror
14.07.2018
08:34:08

kana
14.07.2018
09:06:17
не хватит, там они частично применены
не понятно, про что ты говоришь, где они там частично применены
type family CHead q (xs :: [Type]) :: Type
type family CTail q (xs :: [Type]) :: [Type]
data Q (xs :: [Type]) q where
N :: Q xs q
(:-) :: CHead q xs -> Q (CTail q xs) q -> Q xs q
infixr 5 :-
data Cycle
type instance CHead Cycle xs = Head xs
type instance CHead Cnt (x ': y) = x
в твоем коде они тоже нигде не применены частично

Alexander
14.07.2018
09:10:57
а да, я сначала хотел передавать сами TF, через доп тип данных можно

Google

Vyacheslav
14.07.2018
10:31:16
я вот уже неделю смотрю на 3 библиотеки
задача написать pull-based стрим, который ходит в сеть и преобразует как-то данные, которые потом как-то обрабатываются
смотрю на pipes, streaming и conduit
подскажите какую стоит использовать?

Alexander
14.07.2018
10:33:49
кондуиты с большим числом либ и наверное самые простые
но лучше streaming если двусторонних связей нету

Vyacheslav
14.07.2018
10:47:38
спасибо

Yuriy
14.07.2018
14:37:29
в Хаскеле есть средства для генерации или DSL для FSM парсеров?

shadowjack
14.07.2018
18:59:05
В смысле регулярная грамматика?

Lev
14.07.2018
19:02:55
нет, это техника реализации парсинга (или генерации!) грамматики
есть состояния, есть транзишны между ними, как в школе на уроке информатики. очень общий подход

shadowjack
14.07.2018
19:05:49
Множество языков генерируемых конечными автоматами == множеству языков описываемыми регулярными грамматиками и называется регулярными языками

Yuriy
14.07.2018
19:12:08
Что такое fsm парсер?
парсер, работающий и выглядящий как конечный автомат. не знаю, возможно, мне это не нужно

shadowjack
14.07.2018
19:14:00
Тебе интересно на структуру этого КА посмотреть? Или рабочий парсер который из строки будет синтаксическое дерево строить?

Yuriy
14.07.2018
19:15:36
на самом деле мне нужен аналог Ragel, но с достаточно прозрачной поддержкой Haskell и других языков.
есть гипотеза, что достаточно абстрактную хаскельную библиотеку можно доработать до генератора любого языка
если ещё выше уровнем, мне надо один раз описать грамматику, и автоматически получить парсеры для нескольких языков программирования
как минимум, Haskell и Java
в идеале ещё C, C++, JavaScript, Python

Google

shadowjack
14.07.2018
19:19:27
Ну во первых у языков программирования не регулярная грамматика, а конекстно свободная обычно
У тебя уровней вложенности скобок может быть сколько угодно, они в КА не влезут

Yuriy
14.07.2018
19:20:32
мне не надо парсить языки программирования

shadowjack
14.07.2018
19:20:51
А, пардон - не понял

Yuriy
14.07.2018
19:21:13
спецификация языка уже есть, она довольно простая, по-моему, регулярная

shadowjack
14.07.2018
19:23:04

Yuriy
14.07.2018
19:23:07
у этого языка глубина ограничена. хотя автомат со стэком с точки зрения парсинга вроде не сильно сложнее конечного
классификация языков очень важна, чтобы автоматы писать?

shadowjack
14.07.2018
19:26:34
Ну насколько я помню там свои правила построения для каждого класса

Admin
ERROR: S client not available

shadowjack
14.07.2018
19:29:15
Есть формальный алгоритм как из регулярной грамматики получить КА, а из контекстно свободной - автомат со стеком. Тебе нужен учебник по теории компиляции

Yuriy
14.07.2018
19:30:42
я точно знаю, что КА достаточно
могу спеку языка показать

shadowjack
14.07.2018
19:31:14
Я правильно понимаю что ты хочешь КА использовать как промежуточное представление для генератора парсеров?
Покажи конечно
Правда я всю эту механику видел лет 16 назад в последний раз

Lev
14.07.2018
19:34:36
а почему в, скажем, clang она не применяется?

shadowjack
14.07.2018
19:35:31
http://math.msu.su/~vvb/FormLang/FormLang.html пункт 1.2

dimiii
14.07.2018
19:36:42

Google

Lev
14.07.2018
19:36:50

Yuriy
14.07.2018
19:37:05

shadowjack
14.07.2018
19:37:49

Yuriy
14.07.2018
19:38:42
я этот конечный автомат могу руками написать. мне нужен язык, чтобы написать его один раз и нагенерить дальше автоматически

shadowjack
14.07.2018
19:44:29
формализмы эти. и генераторы парсеров
Генераторы парсеров используют повсеместно. Только обычно сразу из BNF. И формализмы тоже. Некоторые библиотеки парсеров например могут только контекстно свободные грамматики парсить а некоторые и более общие классы.

dimiii
14.07.2018
19:45:41

Антон
14.07.2018
19:47:54

shadowjack
14.07.2018
19:49:17
Ну вот представление first/second там кортеж
Стрелки это на 80% бифунктор

Антон
14.07.2018
19:51:40

Алексей Ayaye :)
14.07.2018
19:57:06
но можно ему генератор добавить )

Антон
14.07.2018
19:58:56

Yuriy
14.07.2018
20:10:31

Алексей Ayaye :)
14.07.2018
20:11:57
как?
ну как, на Java написать
по аналогии с имеющимися

Yuriy
14.07.2018
20:17:54
ну, вариант

Dmitry
14.07.2018
22:10:01
ANTLR не подходит?
Биндинги для генерации на Haskell тоже есть