Шестая статья из цикла про вычислительные выражения. Скотт Влащин начинает рассказывать детали реализация, и это в два раза интереснее, чем раньше.
Функциональное программирование *
От Lisp до Haskell
Новости
Разбор монады ContT, или как написать продвинутый goto, генераторы и файберы на хаскеле
В этой статье я разберу монаду ContT
, и покажу как вернуть return
и другие control-flow операторы из императивных языков программирования, которых мне так нехватало, когда я начинал изучать хаскель.
5. Nix в пилюлях: Функции и импорт
Пятая часть в цикле статей Люка Бруно рассказывает о функциях в языке Nix. Оказывается, у них не бывает имени и только один параметр. Как такое может быть?
Читаем статью, разбираемся. Помимо функций, вы также узнаете, как в Nix устроены модули и их импорт.
Вычислительные выражения: Подробнее про типы-обёртки
Пятая статья из цикла про вычислительные выражения, написанная популяризатором Скоттом Влащиным.
Глубже погрузимся в исследование типов-обёрток и узнаем, наконец, почему список тоже может быть обёрткой.
Истории
Постфиксный калькулятор на Haskell
Можно ли внедрить в Haskell постфиксный калькулятор?
begin push 1 push 2 add end
begin push 1 push 2 push 3 add mul end
На первый взгляд такой код на Haskell не может работать. Функция begin должна иметь произвольное количество аргументов, а Haskell является языком со статической типизацией. Но на самом деле, для написания вариативных (polyvariadic) функций достаточно полиморфизма.
Обобщённые типы. Часть 3/3. Применение контейнерных типов
В последней третьей части обзора продемонстрировано, как на основе обобщённых типов-контейнеров реализуются различные ФП-техники “чистого” построения “эффективных” программ. В заключении будет отмечена роль теории категорий в обосновании важности абстракций, построенных над обобщёнными типами.
Обобщённые типы. Часть 1/3. Полиморфные типы высокого рода
В предыдущей статье раскрывались некоторые базовые понятия теории типов. В этот раз мы рассмотрим обобщённые типы (generics) – необходимость появления такой абстракции, ключевые особенности и различные сценарии использования в программировании.
Обобщённые типы. Часть 2/3. Классы типов и контейнеры
Это вторая часть обзора обобщённых типов, в которой мы расскажем о классах типов и типах-контейнерах.
Вычислительные выражения: Типы-обёртки
Четвёртая статья из цикла Вычислительные выражения Скотта Влащина. Скотт рассказывает о типах-обёртках и об их глубокой связи с вычислительными выражениями.
4. Nix в пилюлях: Основы языка
Четвёртая часть из цикла статей Люка Бруно, посвящённой пакетному менеджеру и языку программирования Nix.
Здесь мы знакомимся с основами языка.
3. Nix в пилюлях: Погружаемся в среду
Третья статья из цикла Nix в пилюлях. Наконец-то, практика! Разбираемся, что такое окружения и поколения, учимся откатывать изменения, выясняем, как работать с каналами
Программирование вне парадигм
Вычислительные выражения: Введение в 'Bind'
Третья статья из цикла про вычислительные выражения в F#. Продолжаем разбираться с функциями-продолжениями и исследуем метод "Bind".
Ближайшие события
Разрабатываем Nix в России
Спринт — особый формат мероприятий, который разработчики Nix и NixOS придумали, чтобы собираться вместе и вместе работать на проектами.
Что-то вроде хакатона, но без элемента соревновательности. Следующий спринт, если всё получится, пройдёт в Казани в августе. Здесь начало истории...
2. Nix в пилюлях: Установка в вашей системе
Вторая статья из цикла Nix в пилюлях. Устанавливаем Nix в нашу систему, разбираемся и профилями и поколениями, и выясняем, что в Nix есть база данных.
Вычислительные выражения: Разбираемся с продолжениями
Вторая часть из цилка статей про вычислительные выражения в F#. Здесь Скотт Влащин рассказывает про функции-продолжения. Сложная, но очень важная тема.
1. Nix в пилюлях: Почему вам стоит попробовать Nix
Предисловие
В 2014 и 2015 годах Люка Бруно (Luca Bruno aka Lethalman) опубликовал серию постов, описывающих пакетный менеджер Nix, операционную систему NixOS и хранилище Nixpkgs.
Люка назвал свои посты пилюлями (англ. pill — таблетка, пилюля).
Берясь за перевод, я пытался выяснить, нет ли у выражения in pills устойчивого смысла.
Оказалось, что скрытый смысл есть у самого слова Nix.
Это одна из торговых марок перметрина — средства против клещей, которое доступно только в виде мази.
Иными словами, медицинского Никса ни в пилюлях, ни в таблетках не бывает.
С момента публикации, Nix в пилюлях считается классическим введением в Nix. В 2017 году Грэм Кристиансен (Graham Christensen aka grahamc/gchristensen) инициировал работу по переводу серии статей в формат электронной книги.
Актуальную оригинальную версию книги вы найдёте по адресу https://nixos.org/guides/nix-pills/.
Там же доступен вариант в формате EPUB.
В 2024 году Марк Шевченко начал перевод книги на русский язык.
Актуальная версия доступна по адресу https://nix-pills-ru.github.io.
🔵
В примерах, команды, которые начинаются с символа "решётка" (#), должны быть запущены с правами пользователя root.
(Адрес статьи на официальном сайте перевода).
Почему вам стоит попробовать Nix
Введение
Добро пожаловать в первую статью из серии "Nix в пилюлях".
Nix — это чистый функциональный пакетный менеджер и система развёртывания для POSIX-совместимых ОС.
Вычислительные выражения: Введение
Скотт Влащин — безусловный гуру в мире F#, написавший введение в язык, которое рекомендуют новичкам вместо официального руководства.
Группа энтузиастов давно (и с переменным успехом) пытается перевести руководство Скотта на русский.
Я завершаю перевод цикла, посвящённого одной из самых сакральных тем языка — вычислительным выражениям. Это как монады, только в .NET.
Неизвестно, когда нам удастся запустить полноценный русский сайт, поэтому я попросил у ребят разрешения опубликовать цикл на Хабре.
Материал интересный и хочется им поделиться.
Далее передают слово автору. Перед вами — первая статья цикла.
По многочисленным просьбам, мы поговорим про тайны вычислительных выражений, о том, что они из себя представляют и как могут применяться на практике (и я постараюсь избегать запрещённого слова на букву М).
В этом цикле статей вы узнаете, что такое вычислительные выражения, как их создавать, а также освоите несколько общих паттернов, связанных с ними. В процессе мы также познакомимся с продолжениями, функцией связывания, типами-обёртками и прочим.
Введение
Кажется, что вычислительные выражениях имеют репутацию заумной штуки, трудной для понимания.
С одной стороны, их достаточно легко применять. Любой, кто написал достаточно кода на F# наверняка использовал стандартные конструкции, такие как seq{...}
или async{...}
.
Но как вы можете создать новую похожую конструкцию? Как они работают за кулисами?
Простые языки программирования
В этом посте я хочу конкретизировать, в чём заключается такая простота, осветить пару причин, по которым она так важна. Я предложу пять ключевых идей, которые должны быть реализованы в простом языке программирования:
- Возможности, которые всегда под рукой
- Быстрые циклы итераций
- Единообразие выполнения любых вещей
- Принципы работы с функциями
- Простые системы статических типов
Монады как строительные блоки функционального Java
Монада – это структура, которая описывает способы композиции абстракций. Можно представить монаду как контейнер, который может хранить в себе другие значения или операции. В этой статье мы рассмотрим то, как реализуются монады в Java.