幾天前我一直在#haskell IRC房間裏閒逛,有人提到C#有語法來做monadic理解。 這是什麼意思?C#中的Monadic理解語法
如果我理解正確,monadic理解只是一種排序bind
操作的方式,哪種類型的聲音就像是do
表示法?那是對的嗎?
問題是,我沒有看到這在C#中。據我所知IEnumerable<T>
是一個monad,其中SelectMany
是它的bind
函數,因爲它的簽名是A -> IEnumerable<B>
。隨着富有想象力的舒展,我們可以做
from x in xs
from y in ys
換算成(我不是100%肯定這裏)
xs.SelectMany(x => ys.Select(y => y), (x, y) => ...)
但即使這是真的,我們想到的作爲monad理解語法的LINQ,它仍然只適用於IEnumerable<T>
。我們確實在C#中有其他單子,如Task<T>
,但我們如何在這些上使用LINQ?
這個問題中的許多假設都可能是完全錯誤的,因爲我仍然試圖掌握一些monad魔法的東西。請糾正我,如果我錯了:)