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