我想了解範圍如何工作在塊中。用哈斯克爾monads瞭解範圍
如果我有以下代碼:
l = [1, 2, 3]
m = [1, 2]
那麼這工作得很好
res = do
a <- l
b <- m
return (a, b)
,並返回m
和l
笛卡爾乘積。
要理解我嘗試以不同的形式來改寫這個範圍內(不含做塊)
我知道,做塊超過一元的操作只是語法糖,所以我試圖「unsugar」,並通過使用this並想出了這個:
res = l >>= (\a -> m) >>= (\b -> return (a, b))
奇怪,我得到這個錯誤Not in scope: ‘a’
。
任何人都可以告訴我我做錯了什麼地方,可能,範圍是如何工作的,因爲它確實看起來像do塊中的return
能夠訪問的魔術?
非常感謝您
對不起,有兩個很好的答案,這是第一個。 我現在明白了。這一切都有道理,因爲現在對於所有不同的a都有一個lambda,這就解釋了爲什麼我對這段代碼感到困惑。 非常感謝你(你們倆) –