我曾在#haskell IRC聊天室逗留了几天,有人提到C#有用于执行单子推理的语法。这是什么意思?
如果我理解正确,单子推理只是一种按顺序进行bind操作的方法,这听起来有点像do符号?是这样吗?
问题是我在C#中没有看到这个。据我所知,IEnumerable 是一个单子,其中SelectMany是其bind函数,因为其签名是A -> IEnumerable 。稍微想象一下,我们可以做
这句话的意思是“转化为(我不是100%确定)”。
但即使这是真的,我们把LINQ看作是一个单子推导语法,它仍然只适用于IEnumerable。在C#中我们有其他单子如Task,但是我们怎样在其上运用LINQ呢?可能在这个问题中许多假设都是完全错误的,因为我仍在尝试理解一些单子魔法的东西。如果我错了,请纠正我 :)
如果我理解正确,单子推理只是一种按顺序进行bind操作的方法,这听起来有点像do符号?是这样吗?
问题是我在C#中没有看到这个。据我所知,IEnumerable 是一个单子,其中SelectMany是其bind函数,因为其签名是A -> IEnumerable 。稍微想象一下,我们可以做
from x in xs
from y in ys
这句话的意思是“转化为(我不是100%确定)”。
xs.SelectMany(x => ys.Select(y => y), (x, y) => ...)
但即使这是真的,我们把LINQ看作是一个单子推导语法,它仍然只适用于IEnumerable。在C#中我们有其他单子如Task,但是我们怎样在其上运用LINQ呢?可能在这个问题中许多假设都是完全错误的,因为我仍在尝试理解一些单子魔法的东西。如果我错了,请纠正我 :)