Ответы Эртеса так же хороши, как и у Джона Л. Я просто хочу добавить кое-что о функторах и моноидах: я считаю, что большая часть терминологии Haskell, несмотря на ее точность, может быть немного неприятной для новых программистов на Haskell. Я всегда говорю новичкам, что моноиды можно рассматривать как «аппендибли», а функторы - как «маппбалы». Очевидно, что это упрощение имеет некоторую потерю, но оно помогает преодолеть начальные лексические барьеры языков. Интерфейс monoid (класс типов) имеет функции «append» и «identity», тогда как функтор просто определяет функцию map. Существует некоторая проскальзывание между извечной идеей добавления и отображения (например, суммирование является своего рода добавлением), но основная идея верна.
Будучи простыми интерфейсами для добавления и отображения, моноиды и функторы быстро обнаруживают множество применений: каждый раз, когда ваша структура данных должна поддерживать добавление или отображение, у вас есть время, когда ваши данные становятся экземпляром моноида или Функтор может упростить процесс.
Надеюсь, это было полезно.
Позже вот список библиотек, о которых вы спрашивали.
Функторы: посмотрите на библиотеку синтаксического анализа, как attparsec. http://hackage.haskell.org/package/attoparsec-0.10.0.2 Функторы позволяют легко составлять синтаксические анализаторы, так что вы можете писать легко создаваемые, легко читаемые синтаксические анализаторы даже для сложных данных. Сравните синтаксический анализатор attoparsec с сопоставимым регулярным выражением!
Monoid: посмотрите на любой массив, векторную библиотеку (http://hackage.haskell.org/packages/archive/vector/0.9/doc/html/Data-Vector.html)), чтобы увидеть использование Monoid для реализации применимости моноидов. Кроме того, это отличная статья о том, как заставить моноиды работать на вас http://blog.sigfpe.com/2009/01/haskell-monoids-and-their-uses.html
Монады: посмотрите на Data.Binary - простую и фундаментальную библиотеку Haskell - для идеального случая использования Монад. http://hackage.haskell.org/packages/archive/binary/0.4.1/doc/html/Data-Binary.html Используя монады, вы можете написать сложную серию инструкций для синтаксического анализа двоичных файлов.