Anatolii
в stack.yaml только resolver
Anatolii
пакет причем Chris Done
Quet
Anatolii
если кому не лень
Anatolii
https://github.com/chrisdone/jl
Anatolii
попробуйте собрать у себя
Anatolii
может у меня что-то
Alexander
нужно было тех кто защищал стек позвать
Alexander
я позвал
Alexander
а чего не jq?
Anatolii
я давно хотел jl попробовать, но не выпадала возможность
Anatolii
вот сейчас нужно
Anatolii
и засада
Anatolii
пойду за jq
Alexander
@anpryl версия из гита у меня new-build-ом собралась
Anatolii
это надо новый кабал накатывать?
Denis
интересно до какого года он будет new
Alexander
2025 ?
Alexander
@anpryl я думаю тот что у тебя есть подойдет
Alexander
скорее всего проблема в чем-то другом
Anatolii
cabal install все поставил
Anatolii
наверное Chris не собирал стэком
Anatolii
надо чтоли issue открыть
Alexander
fpco ребята не собирают стеком
Alexander
лучшая реклама
Denis
на колбасной фабрике работаешь - колбасу не кушаешь
Dmitry
а чем собирают fpco ?
Alexander
думаю что стеком
Alexander
stack/cabal ghci прикольные
Alexander
Kirill я помню я когда-то говорил тебе что посмотрю и сделаю минимальный пример похожий на https://ruhaskell.org/posts/theory/2016/01/06/serialization-with-deptypes.html это все ещё актуально?
Alexander
я только сейчас вспомнил
Kirill
Ну да, хочется избавиться от повторения, или узнать насколько чревато такое избавление
Alexander
а синглетоны для Symbol у нас есть?
Kirill
пока как-то лень было их втаскивать :)
Kirill
а, ты про вообще :)
Alexander
да
Alexander
блин засада какая-то
Alexander
ладно попробую закрыто сначала
Unat
Господа, прошу не закидывать палками и больно не пинать, но у меня вопрос по инструментарию. Есть удобный способ смотреть определения библиотечных функций? Сейчас использую VS Code и несколько неудобно разбираться в новом, бегая между hackage и редактором.
Vasiliy
https://github.com/haskell/haskell-ide-engine
Cheese
интерессуют именно определения библиотечных функций?
Cheese
это немножечко странно
Vasiliy
правда у меня почему-то не заработал этот hie
Cheese
haskell-ide-engine должен показать их типы (и в светлом будущем документацию)
Cheese
но определения-то зачем?
Unat
Да типы, типы, всё так
Unat
и документацию
Unat
вообще плагин под IDEA всё делает, но эта штука однозначно медленнее, чем VS Code /Atom/ иже с ними
Vasiliy
для vscode еще haskero есть
Unat
И haskelly. Только у них есть жуткий недостаток - если в коде ошибка, то все подсказки из библиотек ломаются
Unat
и под виндой не работает.
Unat
судя по всему
A64m
и под виндой не работает.
сейчас под виндой не работает ghc-mod и следовательно зависящий от него hie, но в ghc-mod-е это вроде на днях поправили, значит скоро и в hie должны
A64m
ну и сгенеренная стеком документация под виндой не работает (на винде путь к ее местонахождению другой)
A64m
короче говоря, я-то его под виндой собирал, но для этого надо было править код, что тоже достаточно характерно для хаскельного тулинга
Unat
Понятненько, тернистый, однако, путь
Евгений
К недавней дискуссии
Евгений
На днях в хаскеляч залетел фанат Idris'а. Замечу, что любые попытки построить тьюринг-полный язык с тотальным подмножеством, основанном на MLTT, должны вызывать справедливый интерес haskell-коммьюнити, а чаты по идрису и хаскелю в значительной мере пересекаются. Естественно в дискуссии всплывал вопрос о целесообразности ленивой стратегии редукции. Кроме стандартных аргументов в духе "это сложно и не нужно" всплыл ещё один, претендующий на объективность и достоверность.
Утверждалось, что ленивая стратегия редукции -- основная причина сложности построения денотационной семантики хаскеля, основанной на теории категорий. Но так ли это?
По языку программирования мы хотим построить такую категорию, что каждому типу будет соответствовать объект категории, а каждой функции из A в B -- соответствующую стрелку. При этом мы хотим, чтобы функциям f,g :: A-> B соответствовали одинаковые стрелки тогда и только тогда, когда для любого a из A f(a) = g(a)
Сложность наступает как только мы берём тьюринг-полный язык. Ведь далеко не все функции останавливаются! Как приравнять функции, которые работают бесконечно долго? Есть два выхода из этой ситуации. Оба работают только для языков с энергичной редукцией. Первый -- просто выкинуть нетотальные функции из категории, сделать вид что их просто нет. Естественно при этом теряется всякая доказательная сила рассуждений об этом языке с помощью теории категорий, ведь о частичных функциях мы не может сказать вообще ничего.
Второй -- "добавить" внутрь типа специальный элемент _|_ и сказать, что дополнить f(a) = _|_, если она f(a) не останавливается. Так мы получим корректное равенство на стрелках, но что будет, если мы начнём над этой категорией рассматривать эндофункторы и интерпретировать их в терминах computer science? Ничего хорошего: ведь мы можем легко переводить тотальные функции в нетотальные и наоборот, информация о том кто из них кто абсолютно теряется. Мы столкнулись с той же проблемой, что и в первом случае, но подошли с ней с другой стороны.
Резюмируя: корректной категориальной денотационной семантики не может быть ни у одного тьюринг-полного языка. Но что же делать со всеми наработками в этой области? Ведь на практике они работают. Чуть позже я постараюсь сделать наброски ответа на него
Chris
кана
я думал, что мол в теоркате рассуждения идут независимо от того, что лежит под объектами или стрелками
кана
то есть для теорката любые две стрелки ∀ α β. α → β неразличимы
кана
что же значит "При этом мы хотим, чтобы функциям f,g :: A-> B соответствовали одинаковые стрелки тогда и только тогда, когда для любого a из A f(a) = g(a)"
Viacheslav
не ну как, это не совсем так
Евгений
Не, в 1-теории категорий множество стрелок Hom(A,B) это множество :)
Евгений
Есть более хитрые образования, где Hom(A,B) группоид, чум или симплициальное множество, но всё это уже higher category theory
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
Добрый вечер.
У меня возник чисто теоретический вопрос.
Если я не ошибаюсь, то использование только чистых функций позволяет делать параллелизм без особых проблем для программиста.
А что будет если использовать не просто чистые функции, а те, которые могут принимать аргументы в любом порядке?
Конкретно интересует:
1. Как изменится система типов
2. Даст ли это какой-нибудь выигрыш
3. Любую ли чистую функцию можно свести к чистой коммутативной или для этого нужны какие-то ограничения на чистые функции
4. Есть ли материалы по этой теме, если она не является совершенно абсурдной, разумеется
Евгений
Alexander
не меняет он порядок аргументов никогда
Alexander
это какое-то... я даже не знаю откуда предположение
Alexander
вот то, что не гарантируется порядок вычисления агрументов - это да
Alexander
т.е. (trace "foo" a) - (trace "bar" b)
Alexander
нету гарантии, что вы увидишь foo bar или bar foo
Alexander
Pavel ^
Alexander
вообще ничего не изменится, только функции что-то глупое должны будут делать
ᛏᚺᛖ ᛚᛖᛋᛒᛁᚨᚾ ᛗᚨᚾ ᚷᛁᚱᛚ 🐝
нету гарантии, что вы увидишь foo bar или bar foo
ну вот и мы получаем либо foo bar или bar foo
и если мы захотим это снова заиспользовать и передать в функцию, то мы уже не знаем какой порядок, что есть плохо :с
почему функции будут делать глупое?
то есть класс чистых функций по мощности выполнимых задач эквивалентен чистым коммутативным?
и типы же тоже должны измениться
ведь получается невозможным делать типы отличающиеся от вида
X -> ... -> X -> Y
или я неправ?
Alexander
> ну вот и мы получаем либо foo bar или bar foo
> и если мы захотим это снова заиспользовать и передать в функцию, то мы уже не знаем какой порядок, что есть плохо :с
это глупость, независимо от того вычислится первым a или b они передадутся в функцию в правильном порядке