С подачи http://ivan-gandhi.livejournal.com/2800521.html пошел прочитал википедию про монады. Она оказалась на удивление читаемой. Так вот, краткий пересказ, кто такие монады: Они как бы переизобрели две вещи (и обе - несколько раком):
1. Конвейер (pipeline) с передачей данных между ступенями, в котором один элемент данных на входе ступени может плодить несколько элементов данных на ее выходе (в этом смысле он аналогичен юниксному или скорее пауэршелловскому конвейеру).
2. Исключения (exceptions) - каждая ступень может бросить исключение на обработку элемента данных, и тогда все последующие элементы конвейера пропустятся, а на выход доедет только исключение. Все проблемы обычных исключений полностью присутствуют и в монадическом варианте.
То, как они присваивают в этом конвейере переменные, совершенно соответствует идее, которую я сам по себе придумал в области CEP (Complex Event Processing) - что элемент данных, несомых через конвейер (в CEP это обычно реляционная строка), представляет собой block scope. Но, насколько я понимаю, в монадах все сильно упрощено, поскольку в них элементы конвейера не имеют статического состояния, а только чисто обрабатывают входящие данные (это избегает проблем в ромбовидных топологиях), а так же отсутствуют циклы в топологии конвейеров. Это в частности потому, что конвейер им неинтересен как способ распараллеливания вычислений, а интересен в первую очередь как черезжопный способ бросания исключений.
Пользуясь случаем, не могу не указать на то, что я придумал подобную, но более интересную штуку в мире CEP: http://babkin-cep.blogspot.com/2012/09/streaming-functions-introduction.html
P.S. Учет и контроль:

1. Конвейер (pipeline) с передачей данных между ступенями, в котором один элемент данных на входе ступени может плодить несколько элементов данных на ее выходе (в этом смысле он аналогичен юниксному или скорее пауэршелловскому конвейеру).
2. Исключения (exceptions) - каждая ступень может бросить исключение на обработку элемента данных, и тогда все последующие элементы конвейера пропустятся, а на выход доедет только исключение. Все проблемы обычных исключений полностью присутствуют и в монадическом варианте.
То, как они присваивают в этом конвейере переменные, совершенно соответствует идее, которую я сам по себе придумал в области CEP (Complex Event Processing) - что элемент данных, несомых через конвейер (в CEP это обычно реляционная строка), представляет собой block scope. Но, насколько я понимаю, в монадах все сильно упрощено, поскольку в них элементы конвейера не имеют статического состояния, а только чисто обрабатывают входящие данные (это избегает проблем в ромбовидных топологиях), а так же отсутствуют циклы в топологии конвейеров. Это в частности потому, что конвейер им неинтересен как способ распараллеливания вычислений, а интересен в первую очередь как черезжопный способ бросания исключений.
Пользуясь случаем, не могу не указать на то, что я придумал подобную, но более интересную штуку в мире CEP: http://babkin-cep.blogspot.com/2012/09/streaming-functions-introduction.html
P.S. Учет и контроль: