
Комментарии 105
Скажем, я хочу написать функцию remove, которая удаляет определенный элемент из списка. Должна ли она обойти весь список и удалить все совпадения с образцом или же остановится на первом сопоставлении? Тогда чем она отличается от filter? Что если я хочу, чтобы сопоставление с образцом было более умудрённым? Удалить первые 4 элемента, соответствующих определенному условию. Или чтобы я за условиями обращался куда-нибудь во внешний мир. Как только таких простых функций недостаточно, приходится писать новые.
а то что "удаляет определенный элемент" это значит удаляет именно определенный, то есть точно идентифицированный в списке элемент по индексу например, а filter это функция которая возвращает список этих ID (индексов например) разве не будет проще??? Просто не путать назначения функций и/или смысл слов, разве не проще???
Еще раз убеждаюсь что ФП это
Ещё со времен моего знакомства с программированием, больше всего меня волновала именно сложность, присущая любой предметной области и способы борьбы с оной.
способ борьбы со сложностью методом увеличения сложности. Наверно потому что если сложность не привнести то вроде как и бороться не с чем.
Избегать слов любой ценой
Тут есть проблемки.
Клавиатура заточена под ввод букв и цифр, а не вот этой вот вашей красоты.
Люди общаются между собой словами. Все эти значочки надо как-то называть (а значит слова будут)
Незнакомый с нотацией человек мало того что неспособен прочесть написанное, он даже не может нормально задать вопрос "что делает Х", потому что непонятно как назвать Х.
Что-то я подозреваю что гуглить это всё тоже окажется околоневозможно.
Поэтому всё что я пытаюсь сделать в Я - это отодвинуть компромисс между простотой использования и обобщенностью концепций ещё дальше
В смысле, ещё сложнее использовать чем Haskell?
P.S. Посмотрел ваши туториалы. По ним понять решительно ничего невозможно.
P.S. Посмотрел ваши туториалы. По ним понять решительно ничего невозможно.
Разумеется, туториалы - это следующий шаг после знакомства с самим языком. Вроде никто обычно не жалуется, что не может понять код на языке, которого он не знает. Это нормально. У вас просто не получится с наскока со всем разобраться, минуя фундамент.
В этой статье уже было указано, что я использую лигатуры, а не юникод - поэтому для ввода символа используются буквы. В разделе с операторами объясняется, как их вводить - за каждой буквой закреплён свой токен.
Всё так, можно либо объяснять код, используя слова из предметной области либо самими операторами. В самом Haskell вроде как у
<*>нет своего названия, но ничего - люди как-то пользуются.Нотация там несложная, нужно просто прочитать страничку с операторами и всё станет на свои места. Но как я уже и говорил ранее, это нормально, что человек, не знающий языка не может его прочитать. Если под читаемостью подразумевается именно С-подобный синтаксис - тогда я могу понять.
Можно либо выделить уже отрендереный символ и вставить его в поисковой ввод, либо просто нажать Backspace и глянуть из каких символов он состоит.
В смысле, ещё сложнее использовать чем Haskell?
Я не могу сказать, что использовать Haskell сложно. Для меня это один из самых лёгких языков программирования с ясной семантикой и предсказуемым поведением. Под "отодвиганием компромиса" имеется ввиду обобщение базовых конструкций в стандартном Haskell.
Если вы знакомы с функцией zoom из библиотеки lens - то в Я это контравариантный функтор из категории атрибутов (аналог линз) в категорию стрелок (функций) по первому параметру в State. И вместо функции zoom (которое является словом и имеет свои ассоциации), я могу использовать оператор ha (Hom-функтор, contrAvariant). Если этот абзац показался вам сложным, то мне правда нечего вам предложить и этот язык не для вас. Но если вас вдруг заинтересовало, то я могу помочь разобрать и другие аспекты этого языка.
Всё так, можно либо объяснять код, используя слова из предметной области либо самими операторами. В самом Haskell вроде как у <$> нет своего названия, но ничего - люди как-то пользуются.
Инфиксный map/fmap. А >>= это bind. Вопрос даже не в словах, а можно ли это хуглить.
У меня не получается объяснить, что операторы в Я не надо гуглить - их надо читать. Они состоят из логографических токенов и объясняют, что они делают. Нет нужды к каждому инфиксному оператору добавлять синоним (bind, traverse), только для того, чтобы его запоминать. Вот тут всё объясняется, как это работает: https://muratkasimov.art/Ya/Operators
Вы можете упрямиться и продолжать настаивать на том, что все вокруг неправильно делают, а надо делать так как вы предложили. Или можете попытаться понять почему другие люди пишут, что у них полная фрустрация от происходящего. Я подписываюсь под каждым пунктом в первом комментарии этого треда. Могу добавить, что мне пришлось лезть в интернет за тем, чтобы найти значение слова "логографический" при том, что я знаю разницу между графемами, морфемами и сенонами. За себя скажу, что если Вы пойдёте по первому пути, то я буду считать, что вы просто сделали язык под себя, и перестану им интересоваться совсем.
P. S. Почему бы Вам не попробовать это дело в азиатской среде продвинуть?
Не вижу где автор говорит такие вещи как "все вокруг неправильно делают, а надо делать так как он предложил". Придумал что-то своё, показал другим, в чём проблема? Я не раз видел как на HN или Reddit люди постили гораздо более странные и нишевые вещи, часто бесполезные, порой даже дикие, и другие люди, часто с большой репутацией, уважительно разбирались, интересовались ходом мысли автора, находили даже чем восхититься, давали дельные советы, желали успехов. Ваша личная претензия к автору, похоже в том, что он не принёс ничего полезного лично вам, вот действительно, о чём с такими разговаривать! Ещё же имеют наглость что-то публиковать! Вот так надо каждого экспериментатора затравить, а потом удивляться что на хабр пишут только всякую чушь про котиков и основы питона. Что вы сделали для того чтобы следующий экспериментатор захотел с вами поделиться на хабре своим безумным проектом? Закидали камнями всех предыдущих? Велком некст ван. Да, на сто хобби проектов хорошо если один в итоге станет чем-то полезным, но если остальные 99 не велкомить, то этого одного и не будет никогда! Надо людей мотивировать, помогать им, и другие видя что со скромными проектами людей нормально встречают будут больше стараться. Что блять за комунити такое где все всё знают про все языки и паттерны, а элементарных вещей по комунити билдинг не понимают.
Не вижу где автор говорит такие вещи как "все вокруг неправильно делают, а надо делать так как он предложил"
В сообщении, на которое я отвечал, буквально написано
У меня не получается объяснить, что операторы в Я не надо гуглить - их надо читать
Я признаю, что мог неаккуратно подобрать, но хоть убейте я не понимаю где Вы в моём сообщении нашли шапкозакидательство с моей стороны. Могу отдельно обратить внимание на то, что вот это
P. S. Почему бы Вам не попробовать это дело в азиатской среде продвинуть?
Не подъеб и не предложение свалить в туман. Это интуитивное предположение, что азиатам, привыкшем к логографическому письму и которым в частности не привыкать делать клавиатуры с иероглифами "Я" может подойти гороздо лучше, чем в рускоязычном или англоязычном сегменте.
Что вы сделали для того чтобы следующий экспериментатор захотел с вами поделиться на хабре своим безумным проектом? Закидали камнями всех предыдущих?
Пишу технические статьи осознавая, что я пишу их не для себя или своих коллег, продираюсь через адские проблемы c версткой формул с хабровским wysiwyg, получается не всегда.
Что блять за комунити такое где все всё знают про все языки и паттерны, а элементарных вещей по комунити билдинг не понимают.
Вы говорите о том, что плохо закидывать камнями авторов, а через пару предложений закидываете камнями комментатора.
Разумеется, туториалы - это следующий шаг после знакомства с самим языком.
Нет, не разумеется. Изучать что-то можно как от общего к частному, так и от частного к общему. От туториалов обычно ожидается второе. Но с вашими туториалами это не работает.
Если вы знакомы с функцией zoom из библиотеки lens - то в Я это контравариантный функтор из категории атрибутов (аналог линз) в категорию стрелок (функций) по первому параметру в State. И вместо функции zoom (которое является словом и имеет свои ассоциации), я могу использовать оператор ha (Hom-функтор, contrAvariant). Если этот абзац показался вам сложным, то мне правда нечего вам предложить и этот язык не для вас.
Возможно вы правы и я глуповат. А возможно вы слишком сложно объясняете простые вещи. Такое часто за хаскеллистами замечают. Как уже ставшее классикой "монада - это просто моноид в категории эндофункторов, чего тут непонятного". Или как Кнут, который для объяснения алгоритмов выдумывает вымышленный компьютер с вымышленным ассемблером. Я верю что можно было обойтись без этого, возможно даже получив большую лёгкость усвоения.
У вас есть This/That, которые вы определяете как left/right. А чем собсна сами по себе слова left/right не подошли?
Или Optional/Maybe/Halts. Есть хоть какая-то причина использовать три термина для одного и того же кроме повышения порога входа? Многие знают что такое Optional или Maybe. Уверен, гораздо меньше кто догадается что такое Halts, не прочитав его определение.
Что такое Forth? Не нашёл его описание нигде.
Почему вы называете типы, которые можно собрать из других типов, примитивами?
Кстати, в описании hv опечатка, должно быть [V]oid, а не [V]nit.
В общем возможно вы построили хорошую и прекрасную концепцию. Но очень старательно спрятали её за столькими порогами входа, через которые надо продраться, что кажется по дороге потеряли свою идею об уменьшении сложности.
Нет, не разумеется. Изучать что-то можно как от общего к частному, так и от частного к общему. От туториалов обычно ожидается второе. Но с вашими туториалами это не работает.
Мне кажется, что ваши ожидания - это наверное всё таки ваши проблемы.
Возможно вы правы и я глуповат. А возможно вы слишком сложно объясняете простые вещи.
Дело не в глупости, а в знакомстве с определенными концепциями. Если вам это не интересно - это ваше дело, не понимаю, зачем вы мне ставите в упрёк то, чего вы не знаете и не собираетесь узнавать. Я использую для объяснений те концепции, который используется в самом языке, минуя промежуточные абстракции (которые всё равно потом отбросятся, когда вы попробуете понять фундамент).
монада - это просто моноид в категории эндофункторов, чего тут непонятного
Да, это известная шутка. Но я честно говоря не вижу ничего смешного в том, чтобы повторять то, чего ты не понимаешь и демонстративно отказываясь от этих знаний. Как если бы я одел очки и кривлялся в них перед теми, кто их носит.
Я не использую понятие монад в Я, вместо них используются естественные преобразования, из которых может получится монада - но это не обязательно.
Многие знают что такое Optional или Maybe. Уверен, гораздо меньше кто догадается что такое Halts, не прочитав его определение.
Ну наверное надо прочитать определение. Документация не полная, я не всё описал. Если чего-то нет в документации, можно заглянуть в код - это вполне нормальный процесс в программировании.
Кстати, в описании hv опечатка, должно быть
[V]oid, а не[V]nit.
Спасибо, сейчас исправлю.
Но очень старательно спрятали её за столькими порогами входа, через которые надо продраться, что кажется по дороге потеряли свою идею об уменьшении сложности.
Вы сами устанавливаете себе порог. Вы прямо сейчас тратите своё драгоценное время на написание комментариев о том, что вы отказываетесь понимать фундамент, на котором строятся основы языка. Они на самом деле простые, но на них придётся потратить время, как и на изучение всего того, что вам до этого было не известно.
Ну наверное надо прочитать определение.
Или надо удалить Halts, потому что оно ничего в язык не привносит, а только увеличивает когнитивную нагрузку и время изучения. Но я понял, уменьшение порога входа не входит в ваши цели.
Мне кажется, что ваши ожидания - это наверное всё таки ваши проблемы.
Я думал вы запостили эту статью чтобы получить фидбек. Видимо нет. Ну как хотите. Хорошего вечера.
Что такое монада?
https://wiki.haskell.org/index.php?title=Monad_tutorials_timeline
Любая ссылка подойдёт
Не, так не интересно. Гуглить то я и сам умею, ну и в фп тоже. Хотел от автора объяснение услышать
to talk about what lies beyond the obscure term monad by starting with functors.
то есть монада это - the obscure term, если любая подойдет.
Конечно, вы что SICP не читали?
даже если не читал - прочитать не проблема. На что вы советуете обратить внимание?
На предисловие - про духов в машине и нас, пишущих заклинания. Мне по серьёзке трудно воспринимать вопрос про монады в комментариях под постом, который не все хаскеллисты понимают. То ли ирония, то ли человек дверью ошибся.
Если правда хотите понять о чём речь - советую начать с Milewski, Category Theory for Programmers. А про SICP шутка была, это что-то вроде библии функциональщиков - просветляет, вставляет, но немного про другое.
"Монада" - это сущность, принципиально непостижимая человеком, который не привык программировать на функциональных языках программирования.
— Весь этот разговор довольно примитивен. Мы ведь начали с того, кто я по своей природе. Если угодно, я полагаю себя… Ну скажем, монадой. В терминах Лейбница.
— А кто тогда тот, кто полагает себя этой мандой?
— Монада и полагает, — ответил я, твердо решив держать себя в руках.
— Хорошо, — сказал Чапаев, хитро прищуриваясь, — насчет «кто» мы потом поговорим. А сейчас, друг милый, давай с «где» разберемся. Скажи-ка мне, где эта манда живет?
— В моем сознании.
— А сознание твое где?
— Вот здесь, — сказал я, постучав себя по голове.
;)
Самое лучше пояснение за монады, что я видел:
https://youtu.be/IkXg_mjNgG4?si=rFEzTHzc_J-dyRtq
Я использую для объяснений те концепции, который используется в самом языке, минуя промежуточные абстракции
А это не то же самое, что рассказывать об английском на английском ацтеку?
Избегать слов любой ценой
APL тоже пошел в сторону краткости синтаксиса и где он теперь? Там сам чёрт ногу сломит в этих значках. Зачем впадать в крайности, не понимаю.
Agda это успешно решает вводом закорючек через аккорды.
У вас очень много опечаток в фразе "Agda это решает через костыли".
Если бы на клавиатурах реально был символ ≗ (и у него было человеческое название), я был бы только за использовать его в программировании. Но вот это вот изобретение нотации в шарообоазном вакууме в отрыве от реального мира - спасибо, нет.
У вас есть код
Половина того что вы написали на моём телефоне выглядит как квадратики. К вопросу об игнорировании реальности. И автору в статье тоже приходится вставлять код скриншотами.
ведь вы этоттекст тоже можите прачитать и панять што яимел ввиду
Ох уж этот максимализм... А у вас нет каких-то промежуточных вариантов между греческим и падонкафским?
Одна из причин мне использовать эргодокс со слоями.
Вы можете хоть при помощи вибратора с рулём код писать. Но никакой бизнес на это завязываться не будет.
А вы с телефона пишете код или проводите ревью?
Ревью делаю, а что?
Да чо вы за мобильник зацепились. Открыл на линукс-десктопе, тоже квадратики.
Нериторический, серьёзный вопрос другой: какая альтернатива? Как бы вы написали выражение выше, чтобы без закорючек?
Не знаю. Об этом надо много думать, я не позиционирую себя как дизайнер языков программирования. Но не надо быть поваром чтобы понять что борщ недосолен.
Сами по себе закорючки возможно были бы ок, если бы был нормальный способ их вводить. Если бы был нормальный способ писать текст в трёх-пяти измерениях, может ваши закорючки выглядели бы отсталым средневековьем на фоне того что можно творить. Но когда начинается ha'yo'he - это костыли и кривая попытка игнорировать ограничения реального мира.
эти операторы забирают на себя одну из самых сложных аспектов в программировании - порядок вычислений
В большинстве языков программирования вычисления выполняются в том порядке, в котором они записаны в коде, и вообще никакой сложности в этом нет.
Я и не подозревал, что всё на самом деле так просто! Ни ветвлений, ни условий, ни прыжков в другие участки кода. Просто инструкции, одна за другой...
Читаем сверху вниз, как дошли до jmp - прыгаем в соответствующее место, продолжаем читать сверху-вниз. Да с этим даже дети справляются (см какой-нибудь Scratch).
Вот читать мейкфайл например куда сложнее, потому что надо пройти по зависимостям, собрать весь граф, а потом развернуть его задом наперёд.
Да с этим даже дети справляются
Вопрос не в том, кто с этим справляется, а в том, что control flow может быть достаточно сложен и один из лучших способов сделать его легче - это декларативность. А вот запускать интерпретатор в своей голове, пытаясь разобраться что происходит с такими jmp - может и оперативной памяти не хватить.
Я не совсем понимаю, к чему эти конкретные примеры - как это вообще к это теме этой статьи относится?
Даже взрослые еле справляются со сложными control flow. Я лишь предлагаю свой подход к решению этой проблемы. Он может вам не нравится, но это ваше дело и вы можете критиковать его, просто хотелось бы больше конструктивности.
Вы знаете ответ, никак, это придётся просто запомнить. Впрочем, я и не настаиваю что моё утверждение применимо ко всем языкам. И у C есть куча недостатков и кривых решений (зачем вообще над указателем можно делать & я не знаю).
чтобы в младших (или старших) битиках там что-нибудь хранить
Чот мне кажется это UB.
Это серая зона. Формально UB до C++23, но по весьма забавной причине: из-за сборщика мусора. На который никто обычно никак не рассчитывает при написании C++ кода, но возможность наличия которого учтена в стандарте. Источник: https://pvs-studio.ru/ru/blog/posts/cpp/1178/
А причём тут С++23, речь идёт про C, а не C++.
Мне пишут что в C это тоже UB.
Занимательно. А для каких задач данный язык существует? Или с какими задачами он в теории лучше справляется, чем некоторые другие?
Людям с аудиальным типом восприятия очень некомфортно работать с такими значками. Конечно, жизнь заставит родиться в Китае - выучишь иероглифы, но в целом пример языка APL показывает, что это тупиковый путь. Семантика APL была востребована и нашла своё развитие в современном Фортране и Матлабе, а синтаксис нет.
Судя по вашей логике, то таким людям и читать текст некомфортно. Я пока не знаю примеров языков программирования, оторванных от текста.
Буквенный текст имеет фонетическое представление, и большинство программ вполне нормально воспринимаются внутренним слухом (кроме извращений вроде значащих отступов в питоне, которые многие проклинают в том числе и по этой причине).
Представьте, как музыкант читает ноты. Для меня, например, это похоже на программу.
Так все операторы в Я так же можно произнести, ведь они состоят из букв латинского алфавита. Тут всё описано: https://muratkasimov.art/Ya/Operators
Автор предлагает вам учить кружочки. После этого вы сможете их читать как hi/ho/ha/he/hu. Удобно?
Интересный у вас шрифт используется, не поделитесь названием?
"Кодама". Я его так назвал, так как я не создавал этот шрифт с нуля, я взял Mononoki, изменил некоторые базовые символы и добавил автоматическую генерацию композитных лигатур. Мне это напоминило мультфильм "Принцесса Мононоке", там были такие создания, их звали Кодама и они своими телами похожи на операторы в Я. Вот тут его можно скачать.

yokl- [Y]oneda c[O]variant [K]eisli K[L]eisli оператор
А, ну тогда все понятно, спасибо
Ой, вы прям как мой папа! Он тоже инженер-рационализатор с огромными мозгами и огромным самомнением. Разрабатывал всякие штуки и называл их сокращениями от своего имени и фамилии 😁 (но язык "Я" - это прям вершина, браво!). В советские годы они были очень востребованы, но в современном мире оказались не очень - по той же причине, которую вам во всех комментах пишут: нафига делать сложно простые вещи, если их можно сделать просто?😁
Прикол в том, что папа мой тоже ещё и лексику какую то себе выработал, примерно в вашем духе - пытаясь в простые концепции впихнуть ненужные, но очень красиво выглядящие концепции.
Была тут история значит:
Он мне, как-то давно протягивал интернет-кабель в квартиру. Естессно, как все люди такого склада, он ничего не записывает и не объясняет - ну потому что "и так же всё понятно! а если тебе непонятно - так ты просто не хочешь потратить свое бесполезное время на постижение моей мудрости☝️!". Ни схем, ни чертежей, ничего.
И вот как-то у меня поломался инет, я решил новый кабель завести и поставить роутер от другого провайдера. Для этого надо просверлить дырку в стене - а я вапще хз, где он там чего запрятал и что я могу намотать на перфоратор.
Звоню ему, говорю: "Вспоминай, чо там где тянул, хочу свой кабель вместо твоего".
А он мне в ответ:
- Зачем, дурачок? Там же оптика просветлена по трассе на медь, с коммутатора проключить надо без базы по линии сразу на частоту!
Я такой:
- Эмм...Шта??😵💫
Он с раздражением:
- Ну чо непонятного-то, простреливается же канал сразу с кросса на линию по волокну на циску - так и базу надо коммутировать сразу в медь и осветлить её на оптику!
Я опять:
- Эм..Шта шта???😵💫😵💫😵💫
Он тяжко вздыхает
- Ну... прострелить по линии...ну чо непонятно...?
Я тоже вздыхаю, чешу репу, в голове представляю всю эту картинку целиком - и тут до меня доходит:
- Ты пытаешься сказать, что надо просто роутер в щитке поставить, а в квартиру завести по старому кабелю и не сверлить дыр?
Он снисходительно кивает и бурчит что-то, означающее на его языке "Ну наконец-то ты смог прикоснуться к моей мудрости, дурачок! Пользуйся моим даром и восхищайся! А я улетаю по своим великим делам"😁
Ну, роутер в щитке - это морока с подводом электропитанием ещё большая, чем с дыркой в стене. В итоге мастер провайдера просто какими-то приборчиками прозондировал стену и за пять минут и дырку просверлил и кабель протянул. Потому что это просто, быстро и результативно.
И без загадок.
Но такое решение не назовешь "Я" и под него не сделаешь свой собственный шрифт и не будешь упрекать других в том, что оно ленятся изучить вашу великую мудрость 😁
Отлично написано. Хоть идея языка интересная и уникальная, но показательная надменность автора отбивает желание в этом разбираться, "это не я сложно сделал, это ты идиот".
Есть еще такая байка... Был такой язык Бейсик.. Да что бейсик ... писали когда-то в машинных кодах, а в итоге зачем-то С++ придумали. Не знали дураки что надо было проще... еще проще....
Ваша целевая простота в чем измеряется? То что для Вас сложно, для другого очень просто может... Или Вам просто обидно что то что автор называет простым и элементарным Вам не очень понятно?
Скрытый текст
Пока не дочитал до конца, думал, что эта статья написана гопотой, потому что никто (кроме автора этой статьи) не будет вставлять код с неочевидным синтаксисом и не объяснять хотя бы в комментариях, что каждый синтаксический элемент означает и как надо думать, чтобы самому такое написать.
Выше имеется вполне хорошая дискуссия со сравнением этого языка с Агдой. Я тоже всуну свои пять копеек.
многие люди из академии больше сфокусированы на линейных и зависимых типах - горячие темы, которые легко продать сообществу. Но на мой дилетантский взгляд, это не сделает программирование более удобным занятием (...)
Развитые системы типов нужны для того, чтобы было сложнее сделать ошибку в логике программы. К удобству программирования это имеет слабое отношение, разве что кто-то скажет «как это удобно, когда компилятор не даёт мне писать код с ошибками типизации».
Плохо, что сейчас имеется мало исследований влияния дизайна языка программирования на его эргономику. Кажется, что это ровно то, чего автору не хватает в существующих языках. Впрочем, он и на своём языке не проверяет гипотезу о том, что кому-то на этом будет писать удобнее, чем на Haskell. Хнык.
Развитые системы типов и компилятор, бьющий по голове при попытке сделать хрень, - это прекрасно. Но это легко делается без кружочков и закорючек.
Так а автор вообще не проверяет никаких гипотез по отношению к другим людям 😁
Он просто в ультимативной форме заявляет: "Вам так будет удобнее, потому что я так сказал! И потому что мне самому нравится мой язык и я даже назвал его "Я", чтобы все осознали моё величие!"😁
На самом деле, это отличный пример современного искусства, пост-модерна по всем правилам:
Это логически цельная штука с глубоко зашифрованными смыслами
Это эстетически приятно и стилистически едино
Это отрицает авторитеты и принятые устои
Но также это абсолютно бесполезно и не имеет никакого смысла, кроме того, который в него заложит сам читатель 😁
Эта статья слишком коротка. Я с первого раза ничего не понял, рассуждения показались мне слишком абстрактными. Потом я взглянул на вашу библиотеку, и понял, что мне не показалось.
newtype W_II_II_I w i ii = W_II_II_I (w ii ii i)
Я не настоящий хаскеллист, что такое функтор я понял, что такое монада - тоже понял, стрелку уже не осилил, а вот этих ваших абстракций спасибо не надо.
Что касается вашей исходной посылки про сложности предметных областей, то программирование не создано, чтобы бороться с этим.
Вам просто нужна кастомная клавиатура,и будет красиво.
Советую автору прислушиваться к критике, а не отрицать её. Ну а заявление про сложность вообще до смешного, учитывая как переусложнено всё вот это действо, прям веет элитаризмом.
Сдаётся мне, что нас обманывают и данный язык создан не для программированя, а для выхова Ктулху или ещё какой подобной сущности.
А мне понравилось. Программировать на нём я конечно не буду (с), но как минимум действительно что-то небанальное и интересно поразбираться как с головоломкой, для новых идей (у меня у самого аж целых 2 яп в разработке, и нехватка ASCII-шных символов одна из проблем).
Чтобы найти такие ответы, которыми смогут воспользоваться и другие люди, я потратил около 10 лет.
Судя по комментариям, Вы таких ответов не нашли.
— Да, — наконец сказал он изменившимся голосом.
— Конечно. Понял. ЭтоЙа. Конечно, это жеЙаи есть.
— Молодец, — сказал отец
— Что это такое? — спросил мальчик.
— Это отражение.
— Чего?
— Ну как же так? Ведь только что все понял, а? Давай опять логически. Спроси себя сам — если я вижу перед собой отражение и знаю, что передо мнойЙа, что я вижу?
— Себя, наверно, — сказал мальчик.
— Вот, — сказал отец, — понял наконец.
Мальчик задумался.
;)
Избегать успеха любой ценой!
Избегать слов любой ценой!
Мы здесь...
;)
Поддержу автора, мне понравилось как надстройка над хаскелем, но еще выше уровнем.

не вижу проблем с чтением этого кода.
Обработка нажатий клавиатуры:
j - перемещение вниз
K - перемещение вниз
и т.д.
Возможно, есть шероховатости, но общая концепция понятна - отделить инструмент от бизнес-логики, что на самом деле, действительно, является проблемой разработки . Инструмент (ЯП) переплетен с предметной областью настолько, что разработчикам очень сложно выразить ясно свои намерения под тоннами абстракций, которые они пишут. Автор пытается эти абстракции как раз спрятать за спец символами, оставив чистую логику.
Не вижу проблем с изучением, как и любой язык. А абстракции на то и абстракции, чтобы один раз понять как они работают и потом не возвращаться к этому, оставив себе в качестве работы решение проблем бизнеса - конкретных задач, а не очередную борьбу выразить на очередном языке свои намерения.
С удовольствием прочитаю продолжение.
Ну вот к данному примеру у меня вопрос - почему кружочки у J не такие как у всего остальных букв. В других языках это было бы
match key {
case J: ...
case K: ...
case T: ...
case D: ...
default: return Error()
}
Т.е. все кнопки абсолютно равноправны.
Попробуйте взглянуть вот так
match key { case J:
... case K:
... case T:
... case D:
Предполагаю, что это по аналогии с хаскелем, в данном случае это "вход" в цепочку вычислений.
В хаскеле это будет что-то вроде
<$> параметр1 <*> параметр2 <*> параметр3 <*> параметр4
Когда уже есть некоторое понимание, то это кажется логичным и правильным и сами абстракции нет смысла держать в голове, остается только думать над смыслом, который хочешь выразить. Абстракции просто клей между частями головоломки
Не совсем верно выше выразился, лучше так
match key { case J: press J
case K: press K
case T: press T
case D: press D
Предположите, что есть некоторое дублирование намеренийcase J -> press J, и поэтому эти вот case Smth можно спрятать за некоторой абстракцией, и эти абстракции будут как некоторые контейнеры, в которые вы сложили вашу чистую логику press1...pressN
Поэтому замените типовое выражение match key { case Smth:
на какой-либо спец символ, а все следующие за ним
case Smth: на другой
Абстракции просто клей между частями головоломки
абстракции это основа любой науки, например в геометрии безразмерная точка и параллельные прямые это абстракции. Если из науки выкинуть абстракции науки не останется. Абстракция это и есть очищенный от деталей смысл.
Очень интересно, но нибуя не понятно.
@iokasimov, хочу вас поддержать в этом. Не обращайте внимания на хейтеров. К сожалению, среди нынешних кодеров не особо много людей, стремящихся разобраться в сути вещей, которые они пытаются имплементировать в коде. Каждый день сталкиваюсь со сложной логикой в коде, которую пытаюсь рефакторить и упростить применяя подходы domain driven design и функционального программирования.
Это привело меня к Haskell. Да, для этого пришлось подтягивать недостающие знания в математике. И ваша идея мне импонирует. Есть универсальный язык, которым владеют большое количество людей разных национальностей по всему миру. Это язык математики. Он предельно точен и позволяет описывать все знакомые нам сущности реального мира. Конечно, его нужно изучать, как и любой неродной язык. И конечно, он обогащается расширениями для разных предметных областей чтобы быть более выразительным, не теряя базы: точности и однозначности.
Вы в своей работе расширяете язык математики для более удобного применения в программировании.
Помимо этого, вы прорабатываете свои навыки анализа и обобщения, логического мышления и структуризации. Я бы хотел видеть в своей команде и в отрасли вообще больше похожих на вас разработчиков.
Наверное, интересно было бы поглядеть концепцию — вместо значков фигуры и в VR 3D среде такое использовать для построения сложных конструкций.
Есть тут пара статей на тему:
https://habr.com/en/articles/138884/
https://habr.com/en/articles/139167/
Спасибо, вполне полезный материал для изучения. Вопрос по Haskell: он развивается или там застой? Давно с ним игрался, недавно снова решил поглядеть, как там дела, но что-то не увидел прогресса, как показалось.
Как на дрожжах! ;)
Развивается и даже немного быстрее комфортного. Я на нем писал в прод с 2015-2021, очень быстро развивалась экосистема, тулинг, расширения компилятора. Небольшое комьюнити компенсируется высоким уровнем участников и вторым по скорости прототипирования языком (после Лиспа). Если бы Хаскел стоял на месте, то все промышленные тоже бы топтались, потому что постоянно подглядывают, что там нового у нас придумали.

Я: экстремально композиционный язык программирования