Hacker News Digest

Тег: #monads

Постов: 4

Freer Monads, More Extensible Effects (2015) [pdf] (okmij.org)

Авторы представляют рациональную реконструкцию расширяемых эффектов как альтернативы трансформерам монад. Они показывают, как свободные монады и расширяемые эффекты возникают из постепенного абстрагирования шаблонного кода при вычислениях с эффектами. Этот процесс приводит к "более свободным монадам" (freer monads), которые строятся без ограничения Functor. Продолжение в таких монадах может быть представлено эффективной выровненной по типам структурой данных, что позволяет создать библиотеку расширяемых эффектов, которая не только понятнее, но и быстрее предыдущих реализаций.

Авторы демонстрируют три удивительно простых применения: недетерминизм с обязательным выбором (LogicT), перехват исключений IO в присутствии других эффектов и полуавтоматическое управление файловыми дескрипторами через монадические регионы. Используется новый вид "ленивости", основанный на левом Kan расширении. Подход позволяет легко добавлять, комбинировать и инкапсулировать эффекты, при этом обеспечивая лучшую производительность по сравнению с MTL и другими библиотеками обработчиков эффектов.

by todsacerdoti • 20 ноября 2025 г. в 14:56 • 76 points

ОригиналHN

#haskell#monads#effects#functional-programming#polysemy#effect-ts#koka#effekt

Комментарии (17)

  • Рекомендация изучить работы О. Киселёва (особенно по системам эффектов) за ясность изложения и педагогический подход.
  • Упомянута библиотека eff, но отмечено, что она не вышла в Hackage/продакшн; предложены альтернативы: Polysemy, effectful, Bluefin.
  • Обсуждение расширено на другие языки: Koka и Effekt (полноценные языки с нулевыми затратами на эффекты), effect-ts (самый популярный в TypeScript).
  • Указано, что реализация систем эффектов требует компромисса между сложностью типов, шаблонным кодом, производительностью, обработкой высших порядков и безопасностью.

Löb and Möb: Loops in Haskell (2013) (github.com)

Извините, но предоставленный вами контент неполный. Я вижу только навигационную часть GitHub, но не саму статью о LoeB-MoEB. Пожалуйста, предоставьте полный текст статьи или ее основное содержание, чтобы я мог создать точный и лаконичный пересказ на русском языке в формате Markdown, как требуется.

by fanf2 • 07 ноября 2025 г. в 12:42 • 83 points

ОригиналHN

#haskell#functional-programming#monads#compiler-design#programming-paradigms#github

Комментарии (13)

  • Обсуждение включает два поста на Hacker News: один от 2013 года (популярный в 2021) и другой от 2018 года.
  • Функция "loeb" в Haskell полезна при написании игрушечных ассемблеров для разрешения меток в адреса.
  • Монада "tardis" выполняет ту же задачу, что и "loeb", но с большим стилем.

Type Theory and Functional Programming (1999) [pdf] (cs.cornell.edu)

Конструктивная теория типов объединяет логику и программирование в единую систему, где разработка и верификация программ происходят одновременно. Она представляет собой функциональный язык с уникальными чертами: тотальностью функций, зависимыми типами, позволяющими тип результата определять значением аргумента, а также продвинутыми модулями с логическими утверждениями в интерфейсах. Программы можно извлекать непосредственно из доказательств, что открывает возможности для автоматизированного создания корректного кода.

Книга служит введением и углублённым курсом, начиная с основ логики, λ-исчисления и функционального программирования, затем детально представляет систему теории типов с примерами. Она также критически анализирует предложения по расширению системы, такие как подавление свидетельствующей информации в подтипах или добавление коиндуктивных типов для работы с бесконечными потоками, сохраняя при этом свойства завершаемости. Практическая реализация системы помогла прояснить тонкие аспекты, например роль предположений.

by fanf2 • 01 октября 2025 г. в 07:00 • 179 points

ОригиналHN

#type-theory#functional-programming#lambda-calculus#rust#c++#dependent-types#monads

Комментарии (66)

  • Обсуждается перспектива широкого внедрения функционального программирования благодаря его теоретической основе, аналогично устойчивости реляционных баз данных и SQL.
  • Поднимается вопрос о применении теории типов в императивных языках, с примерами из Rust и C++, где типы улучшают безопасность и выразительность.
  • Высказывается критика функционального программирования как сложного и непрактичного, порождающего "ужасный код", в противовес его восприятию как более безопасного и элегантного.
  • Участники делятся рекомендациями по литературе для изучения темы (TTOP, Types and Programming Languages) и отмечают её сложность, но ценность.
  • Отмечается, что чистые функциональные языки непопулярны (TIOBE), но их идеи (лямбды, монады) проникают в мейнстрим (например, для асинхронного программирования).

What is algebraic about algebraic effects? (interjectedfuture.com)

В программировании «алгебра» — это не школьные уравнения, а способ давать коду строгую структуру через свойства операций. Если обычная композиция объектов ограничивается «они реализуют один интерфейс», то алгебраическая композиция требует, чтобы набор данных и операций удовлетворял фиксированным законам: замкнутость, ассоциативность, единица, обратные элементы и т.д. Набор «целые числа + сложение» образует группу, потому что все четыре закона выполняются; код, в котором сложение строк вдруг выдаёт число, группой не является.

Именно этим объясняется «алгебраичность» Algebraic Effects: набор эффектов и обработчиков строится как свободная алгебра с заданной сигнатурой операций, а значит любая программа сводится к выражению, подчиняющемуся строгим законам переписывания. Практический выигрыш — возможность комбинировать и вложенно перехватывать эффекты без «callback-ада», потому что поведение заранее ограничено алгебраическими законами.

by iamwil • 22 сентября 2025 г. в 14:30 • 82 points

ОригиналHN

#algebraic-effects#monads#ocaml#lean#julia#algebra#type-theory#functional-programming

Комментарии (32)

  • Обсуждается различие между "алгебраическими" в контексте типов данных и эффектов, подчеркивая, что последние связаны с алгеброй монад, а не просто наличием уравнений.
  • Участники предлагают ресурсы для изучения темы (статья "What is algebraic about algebraic effects and handlers?") и проводят аналогии с булевой алгеброй для лучшего понимания.
  • Отмечается сложность терминологии и необходимость перевода абстрактных математических концепций (операции над типами/эффектами) в более доступные для программистов термины.
  • Поднимается вопрос о синтаксическом представлении алгебраических типов (сумм и произведений) в разных языках программирования (OCaml, Lean).
  • Обсуждается практическое применение алгебраических операторов на примере пакета Algebra of Graphics для Julia.