Откуда возникает название "раздел" для частично примененного оператора инфикса?
В 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, и если да, то как?
Ответы
Ответ 1
Как было отмечено в комментариях, Хаскелл получил разделы от Миранды (и Оруэлла). Дэвид Тернер говорит, что получил идею от Ричарда Берда и Дэвида Виле.
Я только что общался с Ричардом Бердом. Он говорит, что не помнит, откуда взялось это имя, но он думает, что Дэвид Уайль придумал это. К сожалению, Дэвид Уил умер в прошлом году, поэтому мы, вероятно, никогда не узнаем. Но Ричард признался, что именно он убедил Дэвида Тернера и Фила Вадлера добавить разделы на своих языках.
Вот страница из Wile тезиса, которая впервые упоминает "раздел". http://imgur.com/a/cQDlu
Ответ 2
Возможно, это происходит из операции "секция массива", используемой в основном в Fortran, особенно для извлечения столбцов или строк. Это имеет смысл, если вы рассматриваете возможность создания таблицы поиска из функции с двумя аргументами.
https://www.phy.ornl.gov/csep/pl/node16.html