Нет, removeSpaces
не является функцией высшего порядка.
Функция высшего порядка - это функция, принимающая функцию в качестве аргумента. removeSpaces
нет, так что нет.
Более высокий порядок - это свойство интерфейса функции, а не его реализации, поэтому мы можем сказать, что removeSpaces
не является более высоким порядком, просто взглянув на его тип: он не принимает никаких функций в качестве аргументов, поэтому это не высший порядок. Он реализован с использованием функции более высокого порядка, но это совсем другое дело.
Например, filter
- функция высшего порядка, потому что она объявлена как функция, принимающая в качестве параметра:
filter :: (a -> Bool) -> [a] -> [a]
Но concat
нет, потому что в качестве аргументов нет типов функций (a -> b
):
concat :: [[a]] -> [a]
Полиморфизм представляет собой сложный крайний случай: вы можете передать функцию в id
- id concat [[1, 2], [3, 4]]
is [1, 2, 3, 4]
- но ее тип не объявляет ее как принимающую какие-либо функции в качестве аргументов:
id :: a -> a
В этом случае id
- это , а не высшего порядка. Функция должна явно иметь аргумент функции в своем типе, чтобы иметь более высокий порядок.