Ни одна из этих функций не является функциями более высокого порядка, потому что ни одна из этих функций не принимает функцию в качестве параметра.
shift
Параметры: n
(Int
) и c
(a Char
): также не являются функциями.
(Также: Inttochar
должно быть inttochar
: имена функций в Haskell не могут начинаться с заглавной буквы.)
Вот функция высшего порядка, которая выглядит как ваша shift
:
higherShift :: (Int -> Char) -> Int -> Char -> Char
higherShift f n c = f (chartoInt c + n)
shift = higherShift inttochar -- same as your original shift
Или, возможно, более полезно:
anotherHigherShift :: (Int -> Int) -> Char -> Char
anotherHigherShift f c = inttochar (f (chartoInt c))
shift n = anotherHigherShift (+n) -- same as your original shift
Вы можете прочитать сигнатуру типа для anotherHigherShift
какчто
- это функция
- , первый параметр которой является функцией (эта функция принимает значение
Int
и возвращает Int
) - , второй параметр которого равен
Char
- и который возвращает
Char
(+n)
является сокращением для \m -> m + n
.