Я часто вижу объявления типа, подобные этому, когда смотрю на Haskell:
a -> (b -> c)
Я понимаю, что она описывает функцию, которая принимает что-то типа a и возвращает новую функцию, которая принимает что-то типа b и возвращает что-то типа c. Я также понимаю, что типы являются ассоциативными (отредактируйте: я был неправ в этом - см. Комментарии ниже), поэтому вышеприведенное можно переписать так, чтобы получить тот же результат:
(a -> b) -> c
Это описало бы функцию, которая принимает что-то типа a и что-то типа b и возвращает что-то типа c.
Я также слышал, что вы можете сделать дополнение (редактировать: действительно, слово, которое я искал здесь, двойственное - см. Комментарии ниже) к функции, переключая стрелки:
a <- b <- c
который, я думаю, эквивалентен
c -> b -> a
но я не уверен.
Мой вопрос: как называется этот вид математики? Я хотел бы узнать больше об этом, чтобы я мог использовать его, чтобы помочь мне писать лучшие программы. Я заинтересован в изучении таких вещей, как дополнительная функция и какие другие преобразования могут быть выполнены для объявлений типов.
Спасибо!