52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 252

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 252

Многие понятия в Haskell позаимствованы из теории категорий, например это функторы, монады. Теория

категорий – это скорее язык, математический жаргон, она настолько общая, что кажется ей нет никакого

применения. Возможно это и так, но в этом языке многие сущности, которые лишь казались родственными

и было смутное интуитивное ощущение их близости, становятся тождественными.

Теория категорий занимается описанием функций. В лямбда-исчислении основной операцией была под-

становка значения в функцию, а в теории категорий мы сосредоточимся на операции композиции. Мы будем

соединять различные объекты так, чтобы структура объектов сохранялась. Структура объекта будет опреде-

ляться свойствами, которые продолжают выполнятся после преобразования объекта.

15.1 Категория

Мы будем говорить об объектах и связях между ними. Связи принято называть “стрелками” или “мор-

физмами”. Далее мы будем пользоваться термином стрелка. У стрелки есть начальный объект, его называют

доменом (domain) и конечный объект, его называют кодоменом (codomain).

f

A

B

В этой записи стрелка f соединяет объекты A и B, в тексте мы будем писать это так f : A → B, словно

стрелка это функция, а объекты это типы. Мы будем обозначать объекты большими буквами A, B, C, …, а

стрелки – маленькими буквами f, g, h, … Для того чтобы связи было интереснее изучать мы введём такое

правило:

f

A

B

g

f ; g

C

Если конец стрелки f указывает на начало стрелки g, то должна быть такая стрелка f ; g, которая обозна-

чает составную стрелку. Вводится специальная операция “точка с запятой”, которая называется композицией

стрелок: Это правило говорит о том, что связи распространяются по объектам. Теперь у нас есть не просто

объекты и стрелки, а целая сеть объектов, связанных между собой. Тот факт, что связи действительно рас-

пространяются отражается свойством:

f ; ( g ; h) = ( f ; g) ; h

Это свойство называют ассоциативностью. Оно говорит о том, что стрелки, которые образуют составную

стрелку являются цепочкой и нам не важен порядок их группировки, важно лишь кто за кем идёт. Подра-

зумевается, что стрелки f, g и h имеют подходящие типы для композиции, что их можно соединять. Это

свойство похоже на интуитивное понятие пути, как цепочки отрезков.

Связи между объектами можно трактовать как преобразования объектов. Стрелка f : A → B – это способ,

с помощью которого мы можем перевести объект A в объект B. Композиция в этой аналогии приобретает

естественную интерпретацию. Если у нас есть способ f : A → B преобразования объекта A в объект B, и

способ g : B → C преобразования объекта B в объект C, то мы конечно можем, применив сначала f, а

затем g, получить из объекта A объект C.

Когда мы думаем о стрелках как о преобразовании, то естественно предположить, что у нас есть преобра-

зование, которое ничего не делает, как тождественная функция. В будем говорить, что для каждого объекта

A есть стрелка idA, которая начинается из этого объекта и заканчивается в нём же.

| 227

idA : A → A

Тот факт, что стрелка idA ничего не делает отражается свойствами, которые должны выполняться для

всех стрелок:

idA ; f

=

f