Существует множество функциональных идиом: монады, аппликативы, стрелки и т. Д. Они задокументированы в разных статьях, но, к сожалению, я не знаю ни одной книги или статьи, где бы они были обобщены в одном месте (есть Typeclassopedia, но в ней много областей, которые плохо покрыты). Может ли кто-нибудь порекомендовать статью / книгу, которая хорошо освещает их в одном месте и которая может быть доступна программисту со средними навыками в FP?
scala
haskell
functional-programming
monads
Константин Соломатов
источник
источник
Ответы:
Я предлагаю, если вы хотите изучить Scala, прочитать книгу Пола Кьюзано и Рунара Бьярнасона:
http://manning.com/bjarnason/
Часть II: Функциональный дизайн и библиотеки комбинаторов
Часть III: Функциональные шаблоны проектирования
Часть IV: Нарушение правил: эффекты и ввод-вывод
источник
Извините, я не знаю статей или книг, в которых подробно рассматриваются различные способы использования всех этих конструкций, но я могу дать вам несколько ссылок на отдельные ресурсы.
Довольно распространенный шаблон - создание преобразователей монад вместо простых монад (см. Также ссылку в следующем абзаце). По сути, это означает, что вы создаете что-то, что необходимо комбинировать с другими монадами, в результате чего получается более сложная монада, способная обрабатывать особенности обеих из них.
В Real World Haskell есть несколько глав о монадах. В главе 14. Монады авторы объясняют основы и некоторые общие способы использования (может быть, список, состояние). Глава 15. Программирование с помощью монад дает больше объяснений о том, как их эффективно использовать (она также охватывает монаду читателя). В следующей главе объясняется, как использовать Parsec , но может быть интереснее поискать статьи о том, как это работает на самом деле: это должен быть действительно хороший пример хорошо организованного использования монад для синтаксического анализа. Fianlly, Глава 18. Трансформаторы монадзнакомит с принципами работы монадных преобразователей и шаг за шагом показывает, как их построить. Также интересны соображения по поводу заключительных разделов главы.
Однажды я прочитал действительно интересный вопрос по SO о творческом использовании монад . Предложенные ссылки были отличным чтением по этой теме. В этом духе я попытался попросить то же самое о стрелах : ответов определенно меньше, чем о монадах, но тем не менее интересных.
Что касается шаблонов ООП, созданных группой из четырех человек, IBM предлагает хороший набор из трех статей по этой теме в их серии « Функциональное мышление» . Целевой функциональный язык - Scala. Далее они объясняют обычные шаблоны проектирования в ООП и показывают, как они отображаются в Scala.
Самая релевантная статья по вашему вопросу - это, конечно, первая, но две другие, тем не менее, могут быть интересными связанными чтениями.
источник
Джереми Гиббонс ведет блог Patterns in FP, которому суждено в конечном итоге стать той книгой, которую вы просите. Конечно, он еще не в состоянии быть столь полезным, как вы могли бы захотеть прямо сейчас, но он заслуживает некоторой поддержки!
Между тем, я скажу +1 за Typeclassopedia Брента Йорги. Это действительно полезно, и если есть более поздние части, которые сбивают с толку, этот сайт - хорошее место, чтобы разобраться в них. Я знаю, что Брент держит это в поле зрения. Если он не достигает своих читателей, помогите ему.
источник
Множество материалов по FP опубликовано на сайте Олега: http://okmij.org/ftp/
Презентация о паттернах FP от Джоша Суэрета: http://jsuereth.com/intro-to-fp/
источник
Вы читали более поздние главы « Learn You a Haskell for Great Good» ?
В главе 6 рассматриваются карты и складки, которые являются двумя наиболее важными «шаблонами проектирования» в функциональных языках.
В главах 11–13 в указанном порядке рассматриваются функторы, аппликативные функторы и монады. Это полезно - во многих руководствах сначала вводятся функторы, а затем монады, а затем добавляются аппликативные функторы в конце (если они вообще это охватывают). Порядок в LYAH лучше, потому что переход от Functors => Applicative Functors => Monads постепенно перемещает вас вверх по лестнице универсальности и власти.
В главе 14 рассматриваются застежки-молнии - вы можете эффективно думать о них как о классах-контейнерах с указателем на определенный фрагмент данных, что означает, что вы получаете доступ O (1) и обновление в месте указателя.
В нем не рассматриваются стрелки или комонады, которые являются более сложной темой в Haskell. Чтобы понять, как и зачем использовать Arrows или Comonads, вам определенно нужно уже иметь твердое представление о Monads, поэтому я не думаю, что это проблема - LYAH твердо нацелен на новичков на рынке Haskell.
источник