好的,那么让我们进入正题:
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])] = []
为什么会这样呢?谢谢!
(我是新手,所以如果问题太蠢,请原谅,但我真的找不到解释)
好的,那么让我们进入正题:
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])] = []
这是因为[1,1]
不符合模式[m]
。后者意味着一个项目的列表(除非用于类型名称)。Haskell已经知道对于该对中的第二个元素是一个列表(通过查看list
参数的类型),并且不需要明确告诉它。