2012-12-27 50 views
5

所以,讓我們去點:哈斯克爾 - 在一個元組列表列表理解(A,[A])

f :: Eq a => a -> [(a,[a])] -> [(a,[a])] 
f x list = [(a,[m]) | (a,[m]) <- list, x == a] 

這樣:

f 1 [(1,[1])] = [(1,[1])] 

f 1 [(1,[1,1])] = [] 

爲什麼呢? 謝謝!

(我是個新手,所以我道歉,如果這是一個太愚蠢的問題,但我真的不能找到合理的解釋)

回答

9

這是因爲[1,1]不匹配的模式[m]。後者意味着一個項目的列表(除非在類型名稱應該使用的地方使用)。 Haskell已經知道該對的第二個元素是一個列表(通過查看list參數的類型),並且不需要明確告知。

+0

我剛剛有一個令人興奮的時刻!哈哈。確切地說,[m]表示一個元素的列表,現在我明白了。非常感謝你! = d – dehq