Проведя много времени на чтение и размышления, я думаю, что наконец понял, что такое монады, как они работают и для чего они полезны. Моя основная цель состояла в том, чтобы выяснить, были ли монады такими, какие я мог бы применить к своей повседневной работе на С#.
Когда я начал изучать монады, у меня создалось впечатление, что они волшебны и что они каким-то образом делают IO и другие нечистые функции чистыми.
Я понимаю важность монад для таких вещей, как LINQ в .Net и, возможно, очень полезно для работы с функциями, которые не возвращают действительные значения. И я также признателен за необходимость ограничить состояние в коде и изолировать внешние зависимости, и я надеялся, что монады тоже помогут с ними.
Но я, наконец, пришел к выводу, что монады для ввода-вывода и состояния управления являются необходимостью для Haskell, потому что у Haskell нет другого способа сделать это (в противном случае вы не смогли бы гарантировать последовательность, и некоторые вызовы были бы оптимизированы). Но для более распространенных языков монады не подходят для этих потребностей, так как большинство языков уже обрабатывают и записывают информацию и легко записываются.
Итак, мой вопрос: справедливо ли говорить, что монада IO действительно полезна только в Haskell? Есть ли веская причина для реализации монады IO, например, в С#?