Почему следующий скрипт на 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]
Кто-нибудь знает, почему первый вариант не дает желаемого результата?