Дима
Я недавно смотрел что может предложить хакадж в плане графов, есть несколько норм альтернатив, там не одна библиотека
Дима
Названия запоминать я конечно не буду
A64m
нормальных - понятие растяжимое
A64m
есть containers, есть fgl
Дима
Ну, скажем, подходящих под задачу автора
Дима
Я просто с похожими целями смотрел
Дима
Просто по списку категорий (не тех) прошёлся с поиском и смотрел что есть
Timofey
пока у меня смутное подозрени, что algebraic-graphs позволит граф "собрать", а fgl - "разобрать". Осталось найти третью либу, которая на лету сконвертит один граф в другой =)
KLH
а на тайп левеле можно изобразить вектор (или список) , который состоит из элементов нескольких типов, но так, что каждый из элементов встречается ровно один раз? порядок элементов не определен, размещаются в этом списке в любом порядке, но главное только один раз.
A64m
KLH
спасибо. в целом я думал, про тайп-левел сеты. но не был уверен, что все это можно увязать. а можно гдето почитать про ограничения type-level в хаскело-окамловых типов языков? что нельзя изобразить на тайплевеле , но можно в языке с полноценным завтипами?
Cheese
Cheese
Denis
ну, справедливости ради это уже и в хаскеле можно, только не шибко удобно
Timofey
KLH
A64m
KLH
спасибо. хм, кстати вижу в телеграме уже сохранено, видимо уже когдато от Вас сохранял на будущее) сейчас начну читать
A64m
A64m
http://homepages.inf.ed.ac.uk/slindley/papers/hasochism.pdf
A64m
там проблемы и ограничения обычно снимаются в новых версиях, так что трудно найти что-то актуальное
A64m
надо смотреть библиотеку https://github.com/goldfirere/singletons это передний край всего этого ужаса
A64m
да там нету правильных паттернов. есть "старая школа" тайплевел-пролога как тут http://www.cse.chalmers.se/~hallgren/Papers/hallgren.pdf
A64m
есть более современная, как в пейперах выше, она сейчас только формируется
A64m
ну и можно посмотреть видео докладов Richard A. Eisenberg и Stephanie Weirich
Vladislav
Какой же парсер у GHC нереальный
Vladislav
Что он делает для обработки ~ это просто тихий ужас
A64m
хорошо что не ленятся и используют один символ много для чего
Vladislav
Ну вообще ambiguity там нет, можно отличить, когда инфиксно, когда префиксно ~ используется
Vladislav
Но парсить его всегда префиксно, а потом отдельным проходом разделять назад, это надо было додуматься
A64m
так наверное потому что он сначала только префиксный был
A64m
а инфиксным стал относительно недавно
Vladislav
Т.е. если написать a ~ b, это на самом деле App "a" (Lazy "b")
Vladislav
Вместо превращения App "a" (Lazy "b") в OpApp "a" "~" "b"
A64m
а в случае какого-нибудь ( ~a ?
Vladislav
Что это за случай с незакрытой скобкой?
A64m
ну она дельше закрывается, конечно
Vladislav
Кстати, да, вот собираются же мерджить type/term парсеры. Возьмем (~a). Это operator section или laziness annotation?
Vladislav
Да не просто собираются, а уже 2 недели 2 человека трудятся фултайм.
Vladislav
где человек = студент Эйзенберга
A64m
да так же как сейчас для велью парсера отличают a ! b от !b и b# c от b # c
A64m
тут-то ничего нового как раз
Vladislav
! whitespace sensitive что ли?
A64m
да
Vladislav
Дайте мне другой язык с нормальным синтаксисом
A64m
а как в нормальном будет?
Vladislav
GHCi, version 8.2.2: http://www.haskell.org/ghc/ :? for help
Prelude> f !a = a
Prelude> :info f
<interactive>:1:1: error: Not in scope: ‘f’
Prelude> :info (!)
(!) :: p1 -> p2 -> p2 -- Defined at <interactive>:1:3
Vladislav
ничего тут не отличается
Vladislav
А, надо -XBangPatterns включить
A64m
так банги не включены
A64m
все эти вайтспейс-сенситив штуки из-за синтаксиса, который добавили в расширениях
A64m
меджик хэш, лейблы, отрицательные литералы и т.д.
Vladislav
а еще "в нормальном" не будет отдельных неймспейсов для типов/тёрмов
Vladislav
и не придется писать '[a] вместо [a]
Vladislav
потому что [a] это List a
A64m
но это уродливо же, когда List a
Vladislav
а NonEmpty a ты как бы хотел писать?
Vladislav
[a]+ какой-нибудь небось
A64m
в нормальном языке не должно быть никакого NonEmpty
A64m
но вообще просто a+
Vladislav
a* тогда для списков?
A64m
ну да
Vladislav
Ну пусть так будет.
A64m
хотя мне нравится, как в хаскеле сделано, что конструктор и тип одноименные, жаль такое терять
A64m
так что разные неймспейсы для них это фича
Влод
Юнит в идрисе тоже одинаковый
A64m
ну в языке с перегрузкой можно сколько угодно всего одноименного в одном неймспейсе иметь
A64m
типы-то различаются у Foo :: a -> Foo a и Foo :: Type -> Type
A64m
но перегрузка это адище,
Vladislav
Ну типы и у [] различаются
A64m
я бы не стал связываться с таким
Vladislav
[] :: forall a. [a] vs [] :: Type -> Type
A64m
ну да, если есть перегрузка, то можно называть одинаково конструкторы и конструкторы типов в одном неймспейсе
A64m
но в нормальном языке перегрузки быть не должно