Доброго времени суток. Я для начала начну с вот такой ссылки на прошлое обсуждение, воззвах к dave.
Абстракция или костыль?
Абстракция. Есть много интересных применений и не только в хаскеле. В F# они называются computation expressions или workflows. На базе монады continuation строится механизм асинхронных вычислений (the async workflow). Ничего подобного в других языках (общего назначения) даже близко не видел. С такой легкостью задаются сложнейшие параллельные и асинхронные вычисления!
Вот можно поподробнее об этом, не применяя слова «монада» или «функтор». А простым Русским языком. То есть, допустим, я разрабатываю бухгалтескую программу, или веб-сайт, или среду разработки. И например, я так могу объяснить некоторые фичи из языков с точки зрения полезности для пользователя:
- RAII нужна мне для того, чтобы при любой ошибке в программе мой файл отчёта закрывался, а не оставался захваченнным, что повлечёт проблемы для других пользователей.
- Замыкания мне нужны для того, с минимальными усилиями сохранять состояние клиентского приложения во время, пока я жду ответа от веб-сервера, не создавая на каждый запрос к серверу новый объект данных.
- Сборка мусора нужна мне для того, чтобы не заботиться об удалении каждого объекта, который я создал, а заботиться лишь о некоторых, и чтобы при этом моя программа не падала из-за ошибок обращения с кучей и не жрала лишнюю память.
- call/cc мне нужен для того, чтобы реализовать в моей IDE инкрементную раскраску файла.
- code walker мне нужен для того, чтобы реализовать call/cc там, где его нет, например, на лиспе.
Каждое из этих объяснений я могу развернуть дальше, но я хотел показать стиль того, что я хочу услышать.
Вот мне нужно объяснение в том же стиле, а что такого хорошего умеют делать монады. Я уже знаю, что монады позволяют отделить чистое от нечистого. Но они явно должны уметь что-то ещё. Так вот, что они умеют ещё? Но по сути, а не без самого слова «монады», без ссылок на сто книжек, без дзен, и без слов, что я сначала должен изучить хаскель. Т.е., без сектоводства, а чисто по делу.
Допустим, если вы знаете 5 применений монад (кроме оформления императивности), то достаточно 5 фраз.