Tag: monads

exception或C#中的monad

我在尝试着 神交 初步了解monads。 我有一个数据层调用,其结果我想单独返回结果,例如没有行更新/数据集等,或exception。 我想我需要使用Exception monad,我可以看作是Either monad的一个特例 我看了几个样本 – 可能样本吨,我不太确定如何或如果推广这个成为一个Either monad – 但我找不到任何不在haskell中的东西 – 不幸的是,我肯定不是grok haskell! 我想知道是否有人能指出我的任何样品。

之前是否发现了在C#中使用async / await?

在关于async / await的stackoverflow之前的一个问题之后,在我看来,await比营销建议更强大和更通用。 它似乎是构建计算表达式的一般方法,就像在F#中一样。 因此,经过一番努力,我想出了一些成功执行的代码,如下所示。 using FluentAssertions; using System.Collections.Generic; namespace EnumerableViaAwait.Specs { [global::Microsoft.VisualStudio.TestTools.UnitTesting.TestClass] public class MyTestClass { public IEnumerable Numbers() { return EnumeratorMonad.Build(async Yield => { await Yield(11); await Yield(22); await Yield(33); }); } [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod] public void TestEnum() { var v = Numbers(); var e = v.GetEnumerator(); int[] expected = { 11, 22, 33 }; […]

IO monad在C#等语言中是否有意义

在花了很多时间阅读和思考之后,我想我终于掌握了monad是什么,它们是如何工作的,以及它们对它们有用的东西。 我的主要目标是弄清楚monad是否适用于我在C#中的日常工作。 当我开始学习monad时,我得到的印象是它们是神奇的,并且它们以某种方式使IO和其他非纯函数变得纯粹。 我理解monads对于.Net中LINQ之类的东西的重要性,而Maybe对于处理不返回有效值的函数非常有用。 我也很欣赏需要限制代码中的状态并隔离外部依赖,我希望monad也能帮助它们。 但我终于得出结论,IO和处理状态的monad是Haskell的必需品,因为Haskell没有别的方法可以做到(否则,你不能保证排序,有些调用会被优化掉。)但是对于更多的主流语言,monad并不适合这些需求,因为大多数语言已经很容易处理和状态和IO。 所以,我的问题是,公平地说IO monad真的只对Haskell有用吗? 是否有充分的理由在C#中实现IO monad?

C#中的Monads – 为什么Bind实现需要传递函数来返回monad?

我在C#中看到的monad的大多数例子都是这样编写的: public static Identity Bind(this Identity a, Func<A, Identity> func) { return func(a.Value); } 例如,请参阅http://mikehadlow.blogspot.com/2011/01/monads-in-c-3-creating-our-first-monad.html 。 问题是,要求func返回一个Identity什么意义? 如果我使用以下定义: public interface IValue { public IValue Bind(Func func) } 然后我实际上可以使用相同的func for Lazy , Task , Maybe等,而实际上并不依赖于实现IValue实际类型。 我在这里缺少什么重要的东西?

为什么在即将推出的.NET 4.0中没有类似IMonad 的东西

…与所有那些新的(如果我们计算IEnumerable并不是那么新)monad相关的东西? interface IMonad { SelectMany/Bind(); Return/Unit(); } 这将允许编写以任何monadic类型操作的函数。 或者它不是那么重要?