Монада IO в C#.

Hes 2014 M10 23
538
0
0
0

1. Что такое монада? (вики) Мона́да в функциональном программировании — это абстракция линейной цепочки связанных вычислений. Её основное назначение — инкапсуляция функций с побочным эффектом от...

1. Что такое монада?

(вики)
Мона́да в функциональном программировании — это абстракция линейной цепочки связанных вычислений. Её основное назначение — инкапсуляция функций с побочным эффектом от чистых функций, а точнее их выполнений от вычислений.
Монада IO (монада строго последовательных вычислений): стратегия связывания — «сначала первое вычисление, затем второе»;

Пример применения монады IO:

   
  1. public XElement LoadXml(string url)
  2. {
  3. return IO.Apply(() => Load(url))
  4. .Map(ToXElement)
  5. .Map(ToStorage)
  6. .Map(SendNotify)
  7. .Run();
  8. }
 

2. Необходимое дополнение о чистоте функций.

Чтобы функция считалась чистой, необходимо, чтобы выполнялись следующие условия:
Получать одинаковый результат вычислений при одинаковых исходных данных и не выполнять изменений состоянияВычисление не должно вызывать видимых побочных эффектов (вывода в консоль, записи в БД и т.д.).

3. Что здесь происходит вообще?

Метод IO<TObj> IO.Apply включает в себя некое лямбда-выражение, строго определенного типа, которое должно исполниться в начале вычислений.Метод IO<TResult> Map указывает последующие выражения, которые должны исполнится далее.Таким образом, мы не задумываемся, как исполняется функция ToXElement - за качеством исполнения функции должен следить программист,а мы же должны задумываться, что должно исполнится в функции LoadXml - синтаксис нагляден и очевиден.

4. Где взять монаду?

Монада честно стырена с https://gist.github.com/theocat/88939f007e5d5268f4ef

Оцените пост

-9