Пример типов исчисления Haskell/лямбда

Предположим, что Haskell или лямбда-исчисление представляют следующие типы функций:

A -> B -> C

(A -> B) -> C

Чем они отличаются?


person UQT    schedule 25.02.2013    source источник
comment
Первый эквивалентен A -> (B -> C). Это был твой вопрос?   -  person n. 1.8e9-where's-my-share m.    schedule 25.02.2013


Ответы (2)


Первая — это функция от A до a (функция от B до C). Вторая — это функция от (функции от A до B) до C. Первый «принимает два аргумента», второй «принимает один аргумент». Первая — нормальная функция, вторая — «функция более высокого порядка».

person J. Abrahamson    schedule 25.02.2013
comment
Обе функции высшего порядка. - person us2012; 25.02.2013
comment
Технически верно, они также оба принимают один аргумент. Возможно, мне следует напугать цитирование функции высшего порядка. - person J. Abrahamson; 25.02.2013
comment
Да, справедливо :) . Люди считают, что функция высшего порядка означает разные вещи в разных контекстах. - person us2012; 25.02.2013
comment
Я склонен рассматривать каррирование и HOF как очень разные компоненты, которые хорошо сочетаются друг с другом, а не как естественное следствие того, что язык основан на лямбда-исчислении. - person J. Abrahamson; 25.02.2013

Вот два примера функций с вашими типами, которые помогут вам понять, чем они отличаются:

valatzero :: Num a => (a -> t) -> t
valatzero f = f 0

plus :: Num a => a -> a -> a
plus x y = x + y
person us2012    schedule 25.02.2013