为什么以下Haskell脚本不能按预期工作?
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (k,v) <- t]
给定 find 'b' [('a',1),('b',2),('c',3),('b',4)]
,解释器返回的结果是 [1,2,3,4]
而不是 [2,4]
。为了让它正常工作,需要引入一个新变量,下面称为 u
:
find :: Eq a => a -> [(a,b)] -> [b]
find k t = [v | (u,v) <- t, k == u]
有人知道为什么第一种变体没有产生期望的结果吗?