Шаблоны функционального дизайна

107

Существует множество функциональных идиом: монады, аппликации, стрелки и т.д. Они задокументированы в разных статьях, но, к сожалению, я не знаю ни одной книги или статьи, где они суммируются в одном месте (есть Typeclassopedia, но в нем много областей, которые не покрыты хорошо). Может ли кто-нибудь рекомендовать статью/книгу, которая хорошо их охватывает в одном месте и которая может быть доступна программисту с промежуточными навыками в FP?

  • 0
    Он не дает прямого ответа на ваш вопрос, но этот другой вопрос содержит некоторую интересную информацию (и, по крайней мере, одну или две ссылки): stackoverflow.com/questions/327955/…
  • 15
    Не могли бы вы рассказать, в каких областях Typeclassopedia плохо освещается?
Показать ещё 7 комментариев
Теги:
haskell
functional-programming
monads

5 ответов

29
Лучший ответ

Мое предложение, если вы хотите узнать Scala, прочитать книгу от Пола Чиусано и Рунара Бьярнасона:

http://manning.com/bjarnason/

Часть II: библиотеки функционального дизайна и комбинаторов

  1. Создание небольших языков
  2. Сериализация JSON
  3. Тестирование на основе спецификации
  4. Parsers
  5. Чисто функциональный parallelism
  6. Чисто функциональное состояние

Часть III: Функциональные шаблоны проектирования

  • Случай для абстракции
  • Моноиды
  • Функторы
  • Монады
  • Аппликативные функторы
  • Трассируемые и складывающиеся структуры данных
  • Comonads

Часть IV: Нарушение правил: эффекты и ввод-вывод

  • Эффекты против побочных эффектов
  • Обработка потока и инкрементный ввод-вывод
  • Обеспечение контроля эффекта с помощью системы типов
29

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

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

В Real World Haskell есть несколько глав о монадах. В Глава 14. Монады авторы объясняют основы и некоторые общие обычаи (возможно, список, состояние). Глава 15. Программирование с монадами дает больше объяснений о том, как эффективно их использовать (оно также охватывает монаду читателя). В следующей главе объясняется, как использовать Parsec, но может быть интереснее искать статьи, описывающие, как это работает: должно быть действительно хороший пример хорошо организованного использования монадов для синтаксического разбора. Fianlly, Глава 18. Трансформаторы Monad описывают, как работают монадные трансформаторы, а затем показывает, как их построить, шаг за шагом. Интересны также соображения, касающиеся заключительных разделов главы.

Я прочитал один раз действительно интересный вопрос о SO о творческом использовании монадов. Предлагаемые ссылки были потрясающими чтениями по этой теме. С этим духом я попытался задать то же самое для arrows: у меня определенно было меньше ответов, чем у монадов, но, тем не менее, интересных.


Что касается шаблонов ООП бандой из четырех человек, есть хороший набор из 3 статей IBM по теме в их серии Функциональное мышление. Целевой функциональный язык Scala. Они объясняют обычные шаблоны проектирования в ООП и показывают, как они отображаются в Scala.

Самая важная статья w.r.t. ваш вопрос наверняка первый, но два других могут быть интересными связанными чтениями тем не менее.

  • 0
    Спасибо, но я имею в виду различные виды паттернов, такие как Monad, Arrow, Applicative no GoF pattern.
  • 0
    @KonstantinSolomatov: Я неправильно понял ваш вопрос, извините. Я добавил несколько ссылок на монады и стрелы.
18

У Джереми Гиббонса Шаблоны в блоге FP, которому суждено в конечном итоге стать в значительной степени той книгой, о которой вы просите. Конечно, это еще не в состоянии быть таким же полезным, каким вы могли бы хотеть только сейчас, но он заслуживает некоторой поддержки!

Между тем, я скажу +1 для Brent Yorgey Typeclassopedia. Это действительно полезно, и если есть более поздние части, которые путают, этот сайт является хорошим местом, чтобы добраться до них. Я знаю, что Брент держит его под контролем. Если он не дойдет до своих читателей, помогите ему.

8

На сайте Олега опубликованы материалы из FP: http://okmij.org/ftp/

Презентация о шаблонах FP от Josh Suereth: http://jsuereth.com/intro-to-fp/

5

Прочитали ли вы более поздние главы Узнаете ли вы о Haskell для большого блага?

  • В главе 6 рассматриваются карты и складки, которые являются двумя наиболее важными "шаблонами проектирования" в функциональных языках.

  • Главы 11-13 охватывают Функторы, Аппликативные Функторы и Монады в этом порядке. Это полезно - во многих учебниках представлены функции "Фунтеры", а затем "Монады", а затем добавляются аппликативные функторы в конце (если они вообще его покрывают). Порядок в LYAH лучше, потому что переход от Functors = > Applicative Functors = > Monads перемещает вас постепенно вверх по лестнице общности и мощности.

  • Глава 14 охватывает молнии - вы можете эффективно воспринимать их как классы контейнеров с указателем на конкретную часть данных, что означает, что вы получаете доступ и обновление O (1) в месте расположения указателя.

Он не охватывает стрелки или Comonads, которые являются более продвинутой темой в Haskell. Чтобы понять, как и почему использовать Arrows или Comonads, у вас обязательно должно быть твердое понимание Monads, поэтому я не думаю, что это проблема. LYAH прочно нацелена на новичок на рынке Haskell.

  • 1
    Да, я прочитал книгу. Мне это очень понравилось. К сожалению, он не скрывает стрелки и многие другие сложные шаблоны. Я также хочу прочитать больше о Монадах и Аппликативах (например, LYHGG не охватывает монаду продолжения).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню