Я пытаюсь добавить компонент по компонентам список кортежей с использованием более высоких функций. Результатом должен быть (сумма первого компонента, сумма на втором компоненте).Добавление поэтапного компонента Haskell
sumPointwise :: Num a => [(a,a)] -> (a,a)
sumPointwise tl = (sumPw1, sumPw2) -- 42:1
where sumPw1 = foldr (\ x y -> (fst x) + (fst y)) 0 tl
sumPw2 = foldr (\ x y -> (snd x) + (snd y)) 0 tl
Но я получаю следующее сообщение об ошибке:
Couldn't match type `a' with `(a, b0)'
`a' is a rigid type variable bound by
the type signature for sumPointwise :: Num a => [(a, a)] -> (a, a)
at .hs:42:1
In the first argument of `fst', namely `y'
In the second argument of `(+)', namely `(fst y)'
In the expression: (fst x) + (fst y)
Похоже, что лямбда-функция является неправильным. Но я этого не понимаю.
Благодарим за помощь!
Ну, если вы ищете емким то, возможно, '(сумма *** сумма). unzip'. –
@ ThomasM.DuBuisson + 'import Control.Arrow' :) – leventov