Я быстро написал однострочник в GHCI и попытался составить сумму с картой. Я решил, что причина, по которой это не удалось, заключается в том, что карта дает вывод общего типа [b], тогда как сумма принимает конкретный ввод Num a => [a]. Однако в этом коде нет ничего плохого, если предположить, что вывод функции карты имеет тип Num b => [b].
Я думал, что написание ограничивающего объявления типа может сработать (хотя я думаю, что это мешает вам сделать это в GHCi), но это все равно не сработало:
myFunc :: Num b => (a -> b) -> [a] -> b
myFunc = sum . map
Дал мне следующую ошибку:
Couldn't match expected type `[[a] -> b]'
with actual type `[a] -> [b]'
Expected type: (a -> b) -> [[a] -> b]
Actual type: (a -> b) -> [a] -> [b]
In the second argument of `(.)', namely `map'
In the expression: sum . map
Есть какой-либо способ сделать это? Может быть, я просто упускаю что-то очевидное (новое для Haskell).
myFunc f = sum . map f
.(.)
составляет унарные функции. - person Thomas Eding   schedule 31.12.2011