Предположим, что Haskell или лямбда-исчисление представляют следующие типы функций:
A -> B -> C
(A -> B) -> C
Чем они отличаются?
Предположим, что Haskell или лямбда-исчисление представляют следующие типы функций:
A -> B -> C
(A -> B) -> C
Чем они отличаются?
Первая — это функция от A
до a (функция от B
до C
). Вторая — это функция от (функции от A
до B
) до C
. Первый «принимает два аргумента», второй «принимает один аргумент». Первая — нормальная функция, вторая — «функция более высокого порядка».
Вот два примера функций с вашими типами, которые помогут вам понять, чем они отличаются:
valatzero :: Num a => (a -> t) -> t
valatzero f = f 0
plus :: Num a => a -> a -> a
plus x y = x + y