---
title: "Монада IO в C#."
description: "1. Что такое монада? (вики) Мона́да в функциональном программировании — это абстракция линейной цепо..."
author: "Hes"
published: "2014-10-23T04:16:28+00:00"
modified: "2014-10-24T01:33:51+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/monada-io-v-c-435382"
markdown_url: "https://yvision.kz/post/monada-io-v-c-435382/markdown"
site_name: "Yvision.kz"
---

# Монада IO в C#.

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

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

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

Пример применения монады IO:
- public XElement LoadXml(string url)

- {

- return IO.Apply(() => Load(url))

- .Map(ToXElement)

- .Map(ToStorage)

- .Map(SendNotify)

- .Run();

- }

 

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

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

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

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

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

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

---

Source: [https://yvision.kz/post/monada-io-v-c-435382](https://yvision.kz/post/monada-io-v-c-435382)