Я писал быстрый однострочный в GHCi и пытался составить сумму с картой. Я понял причину, по которой это не удалось, потому что карта дает вывод общего типа [b], тогда как сумма принимает определенный вход Num a => [a]. Однако в этом коде нет ничего плохого, предполагая, что вывод функции отображения - тип Num b => [b].Haskell: Создать функцию определенного типа с одним типом общего типа?
Я думал писать объявление типа ограничивающего может работать (хотя я думаю, что мешает вам делать это в 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. карта f'. '(.)' составляет «унарные» функции. –