在C#中使用Monads有什么吸引人的场景
让我先说一说,我对Monad有一个幼稚的理解。 我已经阅读Monad上的各种线索,并对这个概念进行了几个小时的研究。 我对这个术语感到不太舒服,但我认为可以肯定地说我一般都明白Monad是什么。
我是一名C#开发人员,希望改善我的工作方式。 什么可以帮助我进一步在我的Monaducation中看到一个Monad在C#中的真实世界应用(即通过linq SelectMany()或者其他),这明显比其他解决oldskool C#中相同类型问题的方法有所改进。
有没有人看过这样的野兽?
这里有一个这样的场景:你想创作一个解析库(一个嵌入式DSL的一个很好的例子),并且你发现最好的解析库是monadic parser combinator库。 因此,您可以利用LINQ语法糖编写C#代码,该代码与您正在解析的语言的语法具有相同的结构,并且您可以获得用于动态语义分析和错误恢复的出色编程模型的好处。 请参阅此博客的说明。
寻找毕达哥拉斯三元组:
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 };
这里有一个这样的场景:你希望编写能够在不保持线程的情况下进行顺序异步调用(例如IO)的代码,但是你不想写异步编程模型(BeginFoo / EndFoo)强迫你进入的绝望的意大利面纠结。 因此,您可以使用monad和LINQ糖,并编写看起来很直线的代码,但它会释放/切换整个线程。 请参阅此博客以获取简要说明。
链接地址: http://www.djcxy.com/p/47663.html上一篇: What is the compelling scenario for using Monads in C#
下一篇: What is a monad?