Подтвердить что ты не робот

Откуда возникает название "раздел" для частично примененного оператора инфикса?

В Haskell мы используем термин "раздел", чтобы указать частично примененную функцию, используемую в позиции infix. Например, для функции foo :: a -> b -> c и значений x :: a и y :: b мы имеем две секции

s1 = (x `foo`) :: b -> c == \b -> foo x b

и

s2 = (`foo` y) :: a -> c == \a -> foo a y

В теории категорий, однако, раздел g of f определяется как правый обратный к f (так что f . g == id).

Я не вижу очевидной связи между этими двумя определениями. Например, s1 явно не является обратным к foo, по крайней мере, не в Hask. Я полагаю, что s1 даже не должен иметь инверсию в Hask.

Является ли категориальное определение источником определения Haskell, и если да, то как?

4b9b3361

Ответ 1

Как было отмечено в комментариях, Хаскелл получил разделы от Миранды (и Оруэлла). Дэвид Тернер говорит, что получил идею от Ричарда Берда и Дэвида Виле.

Я только что общался с Ричардом Бердом. Он говорит, что не помнит, откуда взялось это имя, но он думает, что Дэвид Уайль придумал это. К сожалению, Дэвид Уил умер в прошлом году, поэтому мы, вероятно, никогда не узнаем. Но Ричард признался, что именно он убедил Дэвида Тернера и Фила Вадлера добавить разделы на своих языках.

Вот страница из Wile тезиса, которая впервые упоминает "раздел". http://imgur.com/a/cQDlu

Ответ 2

Возможно, это происходит из операции "секция массива", используемой в основном в Fortran, особенно для извлечения столбцов или строк. Это имеет смысл, если вы рассматриваете возможность создания таблицы поиска из функции с двумя аргументами. https://www.phy.ornl.gov/csep/pl/node16.html