Подтвердить что ты не робот

Каков убедительный сценарий использования Monads в С#

Позвольте мне заявить, что у меня есть инфантильное понимание Монад. Я прочитал различные темы в Monads здесь и провел несколько часов изучения концепции. Я почти не чувствую себя комфортно с этим термином, но я думаю, что можно с уверенностью сказать, что я вообще понимаю, что делает/делает Монада.

Я разработчик С#, который хочет улучшить способ работы. Что поможет мне дальше в моей Monaducation увидеть реальное приложение Monad в С# (то есть через linq SelectMany() или somesuch), что явно улучшает другие способы решения той же проблемы в oldskool С#.

Кто-нибудь видел такого зверя?

4b9b3361

Ответ 1

Вот один из таких сценариев: вы хотите создать библиотеку синтаксического анализа (хороший пример встроенного DSL), и вы обнаружите, что лучшие из них - это библиотеки монадических парсер-комбинаторов. Таким образом, вы пишете его, используя синтаксические синтаксисы LINQ для автора С# -кода, который имеет ту же структуру, что и грамматика языка, который вы разыгрываете, и вы получаете преимущества удивительной модели программирования для семантического анализа на лету и восстановления ошибок, См. этот блог для описания.

Ответ 2

Найдите тропы Пифагора:

  var r = from a in Enumerable.Range(1, 25)
          from b in Enumerable.Range(a, 25-a)
          from c in Enumerable.Range(b, 25-b)
          where a*a + b*b == c*c
          select new [] { a, b, c };

Ответ 3

Вот один из таких сценариев: вы хотите написать код, который выполняет последовательные асинхронные вызовы (например, IO), не занимая потоки, но вы не хотите писать безнадежную путаницу спагетти о том, что модель программирования асинхронного программирования (BeginFoo/EndFoo) заставляет вас. Таким образом, вы можете использовать сахара-монады и LINQ и писать код, который выглядит прямолинейным, но он выпускает/переключает потоки повсюду. См. этот блог для краткого описания.

Ответ 5

Одним из примеров является упрощение проверок null с использованием монады Maybe, как показано в в этой статье.

Ответ 6

LINQ используется во многих решениях (и часто запрашиваемых в вопросах) здесь, в StackOverflow. Просмотрите вопросы с тегом LINQ, и вы увидите реальное использование в мире.

Ответ 8

Недавно я опубликовал блог о реорганизации типичного императивного реального С# кода (функция в NuGet) до функционального, монадического стиля (более конкретно, используя монаду Maybe). Я сделал все возможное, чтобы сделать это маленькими шагами, объясняя рациональный шаг за шагом, поэтому я думаю, что это помогает понять, насколько полезны монады.