Следующая функция принимает два списка возвращает все элементы, которые встречаются в обоих списках на одних и тех же показателей:
equal_els :: Eq a => [a] -> [a] -> [a]
equal_els xs ys = map fst $ filter (uncurry (==)) $ zip xs ys
Видя, как xs ys
происходит в конце с обеих сторон, я сделал что я всегда делаю в этом случае: удалите его! Тем не менее, в результате
equal_els = map fst $ filter (uncurry (==)) $ zip
не компилируется больше, и я не могу за жизнь мне понять, что сообщение об ошибке пытается сказать мне!
Couldn't match expected type ‘[a] -> [a] -> [a]’
with actual type ‘[b0]’
Relevant bindings include
equal_els :: [a] -> [a] -> [a] (bound at ...)
In the expression: map fst $ filter (uncurry (==)) $ zip
In an equation for ‘equal_els’:
equal_els = map fst $ filter (uncurry (==)) $ zip
Couldn't match expected type ‘[(b0, b0)]’
with actual type ‘[a0] -> [b1] -> [(a0, b1)]’
Probable cause: ‘zip’ is applied to too few arguments
In the second argument of ‘($)’, namely ‘zip’
In the second argument of ‘($)’, namely
‘filter (uncurry (==)) $ zip’
: «' zip' применяется к слишком малым аргументам »-' zip' теперь '' [a] -> ([b] -> [(a, b)]) 'и это пузыри - просто позвольте 'xs' стоять и будет работать' equal_els xs = ... $ zip xs' – Carsten