Существует множество функциональных идиом: монады, аппликации, стрелки и т.д. Они задокументированы в разных статьях, но, к сожалению, я не знаю ни одной книги или статьи, где они суммируются в одном месте (есть Typeclassopedia, но в нем много областей, которые не покрыты хорошо). Может ли кто-нибудь рекомендовать статью/книгу, которая хорошо их охватывает в одном месте и которая может быть доступна программисту с промежуточными навыками в FP?
Функциональные шаблоны проектирования
Ответ 1
Мое предложение, если вы хотите узнать Scala, прочитать книгу от Пола Чиусано и Рунара Бьярнасона:
Часть II: библиотеки функционального дизайна и комбинаторов
- Создание небольших языков
- Сериализация JSON
- Тестирование на основе спецификации
- Parsers
- Чисто функциональный parallelism
- Чисто функциональное состояние
Часть III: Функциональные шаблоны проектирования
- Случай для абстракции
- Моноиды
- Функторы
- Монады
- Аппликативные функторы
- Трассируемые и складывающиеся структуры данных
- Comonads
Часть IV: Нарушение правил: эффекты и ввод-вывод
- Эффекты против побочных эффектов
- Обработка потока и инкрементный ввод-вывод
- Обеспечение контроля эффекта с помощью системы типов
Ответ 2
Мне жаль, что я не знаю статей или книг, которые подробно описывают разные способы использования для всех этих конструкций, но я могу дать вам несколько ссылок на отдельные ресурсы.
Довольно распространенная схема заключается в построении монадных трансформаторов вместо простых монадов (см. также ссылку в следующем параграфе). Это в основном означает, что вы строите что-то, что должно сочетаться с другими монадами, в результате чего более сложный способ может обрабатывать функции обоих из них.
В Real World Haskell есть несколько глав о монадах. В Глава 14. Монады авторы объясняют основы и некоторые общие обычаи (возможно, список, состояние). Глава 15. Программирование с монадами дает больше объяснений о том, как эффективно их использовать (оно также охватывает монаду читателя). В следующей главе объясняется, как использовать Parsec, но может быть интереснее искать статьи, описывающие, как это работает: должно быть действительно хороший пример хорошо организованного использования монадов для синтаксического разбора. Fianlly, Глава 18. Трансформаторы Monad описывают, как работают монадные трансформаторы, а затем показывает, как их построить, шаг за шагом. Интересны также соображения, касающиеся заключительных разделов главы.
Я прочитал один раз действительно интересный вопрос о SO о творческом использовании монадов. Предлагаемые ссылки были потрясающими чтениями по этой теме. С этим духом я попытался задать то же самое для arrows: у меня определенно было меньше ответов, чем у монадов, но, тем не менее, интересных.
Что касается шаблонов ООП бандой из четырех человек, есть хороший набор из 3 статей IBM по теме в их серии Функциональное мышление. Целевой функциональный язык Scala. Они объясняют обычные шаблоны проектирования в ООП и показывают, как они отображаются в Scala.
- Функциональное мышление: шаблоны функционального проектирования, часть 1. Здесь они охватывают фабрики, шаблонные методы, стратегию, мухи. Суть в том, что, имея функции как значения первого класса, все намного проще.
- Функциональное мышление: шаблоны функционального дизайна, часть 2. Речь идет о java и groovy. Он описывает шаблон адаптера.
- Функциональное мышление: шаблоны функционального проектирования, часть 3. Здесь они говорят о шаблоне интерпретатора. Опять же, целевой язык groovy.
Самая важная статья w.r.t. ваш вопрос наверняка первый, но два других могут быть интересными связанными чтениями тем не менее.
Ответ 3
У Джереми Гиббонса Шаблоны в блоге FP, которому суждено в конечном итоге стать в значительной степени той книгой, о которой вы просите. Конечно, это еще не в состоянии быть таким же полезным, каким вы могли бы хотеть только сейчас, но он заслуживает некоторой поддержки!
Между тем, я скажу +1 для Brent Yorgey Typeclassopedia. Это действительно полезно, и если есть более поздние части, которые путают, этот сайт является хорошим местом, чтобы добраться до них. Я знаю, что Брент держит его под контролем. Если он не дойдет до своих читателей, помогите ему.
Ответ 4
На сайте Олега опубликованы материалы из 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.