1. Что такое монада?
(вики)
Мона́да в функциональном программировании — это абстракция линейной цепочки связанных вычислений. Её основное назначение — инкапсуляция функций с побочным эффектом от чистых функций, а точнее их выполнений от вычислений.
Монада IO (монада строго последовательных вычислений): стратегия связывания — «сначала первое вычисление, затем второе»;
Пример применения монады IO:
-
public XElement LoadXml(string url)
-
{
-
return IO.Apply(() => Load(url))
-
.Map(ToXElement)
-
.Map(ToStorage)
-
.Map(SendNotify)
-
.Run();
-
}
2. Необходимое дополнение о чистоте функций.
Чтобы функция считалась чистой, необходимо, чтобы выполнялись следующие условия:
Получать одинаковый результат вычислений при одинаковых исходных данных и не выполнять изменений состоянияВычисление не должно вызывать видимых побочных эффектов (вывода в консоль, записи в БД и т.д.).
3. Что здесь происходит вообще?
Метод IO<TObj> IO.Apply включает в себя некое лямбда-выражение, строго определенного типа, которое должно исполниться в начале вычислений.Метод IO<TResult> Map указывает последующие выражения, которые должны исполнится далее.Таким образом, мы не задумываемся, как исполняется функция ToXElement - за качеством исполнения функции должен следить программист,а мы же должны задумываться, что должно исполнится в функции LoadXml - синтаксис нагляден и очевиден.
4. Где взять монаду?
Монада честно стырена с https://gist.github.com/theocat/88939f007e5d5268f4ef