Alexander
сделать циклический список
Alexander
со всеми свойствами цикличности, учитывая модификации
Dmitry
Нет, каков смысл такой конструкции?
Alexander
я не понимаю..
Alexander
вообще смысл чтобы явно был терминатор списка, и мы знали что дальше по кругу идти не надо
Alexander
при всяких модификациях списка и т.п.
Dmitry
Ты в коде везде отбрасываешь значение внутри конструктора E. Зачем внутри тогда значение типа Cycle?
Alexander
везде написанных методах
Alexander
там же только мутации
Alexander
давай напишу toList ?
Alexander
не, лучше unroll назову
Алексей
unloop
Alexander
хм.. хотя для unroll он тоже не нужен
Dmitry
Почему нельзя в объявлении типа заменить E (Cycle a) на E?
Alexander
для зиппера какого-нить нужен, или uncons
Alexander
потому, что у тебя в руках может не быть головы
Алексей
E нужен для tail & Co
Alexander
представь цикл [1,2,3,<loop>]
Alexander
если ты его раскручиваешь то будет [1,2,3,1,2,3...
Alexander
если я тебе дам его начиная с двойки
Alexander
то после раскручивания должно быть [2,3,1,2,3...]
Alexander
uncons :: Cycle a -> (a, Cycle a) uncons (a :> as) = (a, as) uncons (E as) = uncons as
Dmitry
О. Я понял. Спасибо.
Alexander
но если честно я не знаю ни одного юзкейса для такой структуры
Alexander
если найдется, то нужно ввести ещё forceSpine метод
Alexander
который будет форсить структуру, чтобы не утонуть в персистентности
Dmitry
но если честно я не знаю ни одного юзкейса для такой структуры
Интернет тоже, кроме как в качестве структуры данных для очередей, и т.п.
Alexander
в мутальном языке для всяких циклических буфферов я смысл вижу
Alexander
За бесконечное время
Namdak
Cycle может использоваться для генерации бесконечного циклического списка квантов планировщика. Вот пример на Rust https://gist.github.com/5HT/6a9923c78c1e1c3d358b271b882dfa1e
Alexander
ну для cycle я вижу много использований
Alexander
но то, что создается в haskell с помощью cycle - это просто бесконечный список в компактной форме
Alexander
блин я был побит coerce-ом
Alexander
который safe
kosc
Вообще я правильно понял, что всякие манипуляции над любыми синтаксическими структурами - это типовые задачи для Haskell?
Aleksei (astynax)
Хаскель - общего назначения. На нём всё можно :)
Aleksei (astynax)
Но да, околопарсерное на нём пишут часто
Aleksei (astynax)
Как и на OCaml
Aleksei (astynax)
Просто потому что удобно парсер-комбинаторы и реализовывать и использовать
Cheese
Хаскель — типовой язык для этой задачи
kosc
Последняя формулировка агонь :)
Dmitry
ну в общем-то так и есть. я вот пытался комбинаторные парсеры писать на си, то еще развлечение, доложу я вам
Andrey
"Черт побери, я совсем не знаю что такое хаскель, но о нем все так вкусно рассказывают, что в моем личном графике учебы он уже на одних из ближайших позиций после JS" (С)
kosc
Спасибо, поржал.
Alexander
У меня есть крошечное хобби. Я собираю список известных плюсовиков, которые переметнулись в Haskell и начали оттуда таскать всякие ништяки.
Aragaer
у меня есть целая куча идей, чего бы можно было накодячить
Aragaer
но почему-то не знаю, что из этого стоит пилить на хаскеле
Aragaer
"прям щас" пишу прототип проги на лиспе, которую потом буду переделывать на раст.
Leonid 🦇
но зачем?
Aragaer
там цель - получить минимальную либу, которую потом можно было бы закатать в консольное приложение или же на андроид
Cheese
кстати, о парсерах. Хаскель хорошо подходит для задачи написания парсера, если язык не важен. но что если я хочу сделать парсер на С++ или JS? я могу написать парсер на Парсеке или аналоге и интерпретировать его в код на другом языке?
Aragaer
вот. А мне парсить особо нечего
Cheese
вот. А мне парсить особо нечего
я не в контексте ответа на твой вопрос, извини
Aragaer
а, ок
Aragaer
да, не так прочитал
kosc
Меня сейчас больше интересует кодогенерация сторонних ЯП на Haskell. И я хз, где найти под это какой-нибудь тутор для уже начавших, но ещё не особо шарящих.
Leonid 🦇
fun n = "public static void main() { return " <> show n <> "; }" - кодогенерация на хаскеле
Cheese
да, не так прочитал
а в чём проблема, собственно?
Cheese
Есть они где-то в открытом доступе?
мой обзор некоторых решений для кодогенерации С https://ruhaskell.org/posts/talks/2016/08/18/ivory-high-performance-code-for-haskell.html
kosc
Спасибо, гляну.
Cheese
@qnikst может рассказать про всякие inline-*, впрочем, это не совсем то
kosc
Ну пусть расскажет, если ему не лень.
Leonid 🦇
расскажет скоро, в Питере
Leonid 🦇
Очередная встреча сообщества пройдет 19 апреля в офисе JetBrains, На повестке дня: «eDSL для дерева переходов на free-монадах и экзистенциальных типах» Александр Гранин, в прошлом сотрудник "Лаборатории Касперского" и “2ГИС”, а ныне Haskell-разработчик в компании Restaumatic, основатель сообщества LambdaNsk в Новосибирске, расскажет о том, как спроектировать статически типизированное дерево переходов с возможностью ходить по нему вперед и назад и почему не стоит писать такой умный код. «Теория и практика встраивания внешних языков программирования в Haskell» Александр Вершилов, разработчик в Tweag I/O, рассмотрит в докладе подход, позволяющий встраивать языки без дополнительного бойлерплейта и использующий сильные стороны гостевого и основного языка, на примере Haskell, Java и R. «Возможности использования формальных верификаций на Coq для простейших моделей смарт-контрактов» (Андрей Ляшин) Андрей Ляшин, участник стартапа FinProof и популяризатор теории категорий в программировании, рассмотрит реализацию основных функций стандартного токена ERC20 с демонстрацией доказуемости и недоказуемости свойств для корректной и, соответвенно, некорректной реализаций рекурсивных функций переводов, лежащих, в частности, в основе атаки на the DAO. —--- Встречаемся 19.04 в 19:00 в офисе JetBrains: Университетская наб., 7-9-11, корп. 5 (вход с Кадетской линии), БЦ «Universe». Вход бесплатный, но необходимо зарегистрироваться (проход в БЦ по спискам): https://spb-fp-meetup.timepad.ru/event/696867
kosc
Доклад какой-то будет?
Alexander
будет
Alexander
но это не кодогенерация - кодогеренация это ivory и т.п.
Alexander
как-то было дело, я вообще руками код генерил только с pretty-printer-ом
kosc
Встреча всё равно интересная, зарегаюсь.
Alexander
возможно этот код даже все ещё работает где-то (cc @voidlizard )
Dmitry
что где?
Dmitry
если ты про сишный трие - то он работает, да
Dmitry
и генерация db для матчинга отпечатков трафика (в роутер) тоже работает