• Пишем (недо)интерпретатор на Haskell с помощью alex и happy

    Привет, Хабр! В этой статье мы рассмотрим, как сделать своими руками (недо)интерпретатор на Haskell. Заинтересовавшихся прошу под кат!

    Однажды мне пришла мысль написать свой интерпретатор, причем обязательно на Haskell. Писать его с нуля — занятие не для слабых духом, да и зачем, если для этого уже все написано другими, (возможно) более опытными людьми!
    Читать дальше →
  • Вышел GHC 8.2

      Вышла новая версия де-факто стандартного компилятора Haskell — GHC 8.2.1! Этот релиз является скорее итеративным улучшением, но вместе с тем имеет и ряд новых интересных фич, относящихся к удобству написания кода, выразительности языка и производительности скомпилированных программ. Рассмотрим же наиболее интересные, на мой взгляд, изменения!
      Читать дальше →
    • DevConf::BackEnd уже на этой неделе 17 июня в субботу, программа сформирована

        Приглашаем принять участие в DevConf::BackEnd в эту субботу, в центре внимания: PHP 7.1, слабости сетевого API в ядре Linux, чат-боты, живые видео-трансляции, системы обработки событий и Haskell.

        Открывает конференцию интересный доклад Валентина Бартенева — участника команды разработки Nginx. Он будет ругать линукс — точнее, сетевой API ядра для userland-приложений, и жаловаться на жизнь нелегкую, многопоточную мультиплексируемую.
        Читать дальше →
      • Избегание ада с помощью монад

        • Перевод

        Мы как программисты иногда попадаем в "программистский ад", место где наши обычные абстракции не справляются с решением ряда повторяющихся проблем.


        В данной статье будут рассмотрены такие проблемы, синтаксические конструкции используемые для их решения и наконец как эти проблемы могут быть решены единообразно с помощью монад.


        Ад проверки на null


        Данная проблема возникает когда несколько частичных функций (функции которые могут не вернуть значение) нужно выполнить последовательно.


        Такие функции обычно приводят в глубоко вложенному и сложно читаемому коду с чрезмерным количеством синтаксического шума.


        var a = getData();
        if (a != null) {
          var b = getMoreData(a);
          if (b != null) {
             var c = getMoreData(b);
             if (c != null) {
                var d = getEvenMoreData(a, c)
                if (d != null) {
                  print(d);
                }
             }
          }
        }
        Читать дальше →
      • Как я "<" моноидом делал

        image Некоторое время назад в одном уютном камерном собрании я делал доклад о своей разработке — скриптовом лиспоподобном языке Liscript. Начал с азов — семантики вычисления списков, префиксной нотации… Дошел до произвольной арности стандартных операций:

        + 1 2 3
        => 6
        

        все интуитивно понятно, вопросов не возникает. Рассказываю про булевские значения, привожу пример:

        < 1 2
        => true
        

        тоже все понятно. И тут вопрос из зала: «а если 3 аргумента передать, как будет вычисляться?» Я решаю, что это хороший повод выпендриться умными терминами, и отвечаю: «точно так же — как свертка по моноиду» :) И тут же поправляясь — «хотя операция сравнения не является моноидом», пишу пример:

        < 1 2 3
        => true
        < 1 2 3 4 1 2
        => false
        

        Все так же интуитивно понятно, вопросов не возникает и продолжаем дальше (благоразумно оставляя без рассмотрения вычисления примитивных операций на одном аргументе и вообще при отсутствии оных, а также вычитание/деление и прочие немоноидальные операции :)). Успешно миновав в докладе подобных камней, через некоторое время я подумал — а можно ли как-то изловчиться, и все-таки сделать операцию сравнения моноидом (в каком-либо смысле)? И мне кажется, мне это удалось. Заинтересовавшихся темой прошу под кат.
        Читать дальше →
      • Типизируя техническое интервью

          Предлагаю читателям "Хабрахабра" перевод статьи Kyle Kingsbury, a.k.a "Aphyr".
          Ранее: Заклиная техническое интервью


          В прежние времена, задолго до восхода Церкви, все заклятья произносились по чистому случаю, все действия были разрешены, а смерть была обыденностью. Многие ведьмы покалечились из-за своей магии, их находили изломанными в центре круга искривленных, застеклившихся деревьев и горящих камней, не гаснущих даже под водой; некоторые полностью исчезали, или начинали путешествовать по горным перевалам, никогда не касаясь ногами земли, никогда не согревая воздух своим дыханием.

          Читать дальше →
          • +13
          • 4,7k
          • 7
        • Пишу как хочу, или Все на встречу с ruHaskell в «Лаборатории Касперского»


            6 апреля 2017 «Лаборатория Касперского» и сообщество RuHaskell вновь будут рады видеть всех, кто считает Haskell лучшим языком на свете. На этой второй по счету встрече (на первой прошлогодней мы тоже говорили о магии типов Haskell и сравнивали его с C++) обсудим наш язык и его “коллег по цеху” в функциональной парадигме, поделимся опытом применения в решении прикладных задач бизнеса, поднимем наболевшие вопросы и наконец, просто пообщаемся.

            В программе — много полезного и ценного: если коротко, то узнаем как применять Haskell там, где его пока не используют — для GUI на десктопе и в браузере, как альтернативу базе данных, как «клей» для внешних сервисов, — и почему это хорошо и правильно. А если подробно, то вас ждут следующие доклады:
            Читать дальше →
          • Haskell: об одном методе реализации функций с переменным числом параметров

            • Tutorial

            – А видела ты Черепаху «Как бы»?
            – Нет, – сказала Алиса. – Я даже не знаю, кто это такой.
            – Как же, – сказала Королева. – Это то, из чего делают «Как бы черепаший суп».

                              Льюис Кэрролл, 
                                       «Алиса в Стране чудес»

            — Судя по твоим речам, ты хорошо знаешь Фангорн? — спросил в ответ Арагорн.
            — Какое там! — отозвался старик. — На это ста жизней не хватит. Но я сюда иной раз захаживаю.

                             Джон Р. Р. Толкиен, 
                                      «Властелин Колец» — к слову о моём знании Haskell ;)


            Homines dum docent, discunt. (Объясни другим — сам поймёшь.)
                             народная латинская поговорка


            Все знают, что любая функция Haskell по своей сути является функцией одного параметра. Функции «как бы» нескольких параметров просто принимая первый аргумент, возвращают другую функцию, принимающую второй аргумент (исходной функции) и обратно возвращающую функцию и т.д. до финальной функции, которая уже возвращает значение не функционального типа (каррирование).

            Казалось бы о каком переменном числе параметров может идти речь при таком раскладе? Однако поразмыслив, посмотрев исходники printf или просто почитав wiki.haskell становится очевидным, что как раз ФП даёт ключ к достаточно красивому, хотя и несколько «казуистическому» решению этой задачи.

            В настоящей публикации я рассмотрю один из способов реализации такого механизма на простых примерах, а также предложу некоторое обобщённое решение на базе Template Haskell, для превращения семейства обычных функций с последним параметром типа список в функцию с «как бы с переменным числом параметром» (далее по тексту просто «с переменным числом параметром»).
            Читать дальше →
            • +24
            • 3,8k
            • 4
          • От моноидов к алгебрам де Моргана. Строим абстракции на Haskell

            Что общего у нормального распределения, конечных автоматов, хеш-таблиц, произвольных предикатов, строк, выпуклых оболочек, афинных преобразований, файлов конфигураций и стилей CSS? А что объединяет целые числа, типы в Haskell, произвольные графы, альтернативные функторы, матрицы, регулярные выражения и статистические выборки? Наконец, можно ли как-то связать между собой булеву алгебру, электрические цепи, прямоугольные таблицы, теплоизоляцию труб или зданий и изображения на плоскости? На эти вопросы есть два важных ответа: 1) со всеми этими объектами работают программисты, 2) эти объекты имеют сходную алгебраическую структуру: первые являются моноидами, вторые — полукольцами, третьи — алгебрами де Моргана.

            Читать дальше →
          • Магия newtype в Haskell


            Основной способ задать новый тип данных в Haskell — это использование конструкции data. Однако, есть ещё и newtype. Практикующие программисты Haskell пользуются конструкцией newtype постоянно, популярный линтер hlint предлагает заменять data на newtype если это возможно.


            Но почему?


            Читать дальше →
            • +23
            • 3,4k
            • 3
          Самое читаемое