Что такое монада в ФП, в категориальных терминах?

Каждый раз, когда кто-то обещает «объяснить монады», мой интерес возбуждается, только чтобы смениться разочарованием, когда предполагаемое «объяснение» это длинный список примеров, заканчивающийся каким-то небрежным замечанием о том, что «математическая теория», лежащая в основе «эзотерических идей», «слишком сложна для объяснения на данном этапе».

Теперь я прошу обратного. Я хорошо разбираюсь в теории категорий и не боюсь погони за диаграммами, леммы Йонеды или производных функторов (а также монад и добавлений в категориальном смысле).

Может ли кто-нибудь дать мне ясное и краткое определение того, что такое монада в функциональном программировании? Чем меньше примеров, тем лучше: иногда одно четкое понятие говорит более сотни робких примеров. Haskell отлично подойдет как язык для демонстрации, хотя я не привередлив.

49
задан Kerrek SB 21 November 2011 в 16:44
поделиться