所以,让我们谈谈:
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])] = []
为什么? 谢谢!
(我是新手,所以如果这是一个太愚蠢的问题,我道歉,但我真的找不到解释)
答案 0 :(得分:9)
那是因为[1,1]
与模式[m]
不匹配。后者表示一个项目的列表(除非在类型名称应该使用的地方使用)。 Haskell已经知道该对的第二个元素是一个列表(通过查看list
参数的类型),并且不需要明确告知它。