我正在準備我的關於Haskell的期末考試,而我會在單子,我們被賦予這樣一個例子:結果在Haskell與單子表情
給出下面的定義列表單子:
instance Monad [] where
m >>= f = concatMap f m
return x = [x]
,其中各類(>>=)
和concatMap
是
(>>=) :: [a] -> (a -> [b]) -> [b]
concatMap :: (a -> [b]) -> [a] -> [b]
什麼是表達式的結果?
> [1,2,3] >>= \x -> [x..3] >>= \y -> return x
[1, 1, 1, 2, 2, 3] //Answer
這裏的答案是什麼,我認爲這是,現在我們簡要地走過去單子不同,但是從我的理解(>>=)
被稱爲綁定,並且可以在上面的表達式爲「applyMaybe」讀。在這種情況下,對於綁定的第一部分,我們得到[1,2,3,2,3,3]
,我們繼續綁定的第二部分,但定義return x
以返回x的列表。這應該是[1,2,3,2,3,3]
。但是,我可能誤解了這個表達。任何人都可以解釋我的方法做錯了嗎?我應該如何解決這個問題。謝謝。
您應該首先展開'>> ='和'return',將它們替換爲它們的定義。 – melpomene
「根據我的理解(>> =)被稱爲綁定,並且可以在上面的表達式中讀作applyMaybe」 - 名稱「applyMaybe」只會在「Maybe」monad中有意義。 – duplode