2010-12-20 49 views

回答

1

Haskell是一种函数式编程语言。没有什么特别的,但它的设计使其易于学习和理解,在实践中非常有效和高效。 Haskell的一个非常特殊的特征是泛化的概念。这意味着,不是直接实现一个想法,而是试图找到一个更一般的想法,这意味着你的想法是一个特例。这样做的好处是,如果将来发现其他特殊情况,则无需实施它们,或者至少从头开始不完全。

但这并不意味着你不能在c#中做所有事情,在.net中有很多组件,它在内部使用你在Monad中获得的相同概念。即使大多数开发人员使用它,但他们不知道名称“Monads”。

如果你想在c#中使用相同的语法,那么你不能这样做。

如果您看过Monarch的文章this,那么您将很容易地知道Monads的所有概念都在c#中。

+0

显然C#没有Haskell的语法,但是它对monad有特殊的语法。 '从A中的x中的y中选择f(x,y)'是C#中monad的语法糖。 – Gabe 2010-12-20 08:50:41

4

那么,LINQ本身是基于monad,通过SelectMany。有关更多说明,请参阅Wes Dyer's blog post on the topic

虽然他们不常用,但大多数LINQ用户不会认为自己是使用monads。

0

除了乔恩的回答,请查看关于LINQ的数学双,活性框架这很有趣,以及娱乐专家到专家视频:

Channel 9 - Expert to Expert

+0

'IObservable'是'IEnumerable'的对偶,但都参与相同的LINQ语法。 – Gabe 2010-12-20 08:44:20

2
  • 的异步单子在F#中的异步 工作流(在C#中的异步不 单子)
  • 列表理解 单子,在.NET的LinQ中
0

在C#6.0中有一个monadic空条件运算符?.当您需要从嵌套对象属性中检索值时,它可以帮助简化空检查,其中沿途的任何内容都可以为null。您可以在空条件运算符部分阅读更多here

相关问题