или Функторы в теории категорий против функционального программирования

(Примеры и большая часть самого определения взяты из ответа Джареда Смита о переполнении стека, но я также хотел бы поблагодарить авторов комментариев!)

функтор

  1. представляет собой структуру данных
    (JavaScript - закрытие, Array, Object и т. д.,
    Haskell - типы, созданные с помощью data, type, newtype)
  2. поддерживает операцию сопоставления
    (например, функцию map в Arrays в JavaScript или
    fmap в Haskell's Data.Functor)
  3. уважает личность (xs.map(x => x) === xs)
  4. уважает состав (xs.map(f).map(g) === xs.map(compose(f,g))

Функтор идентичности является эндофунктором (как и почти любой другой функтор в функциональном программировании (ссылки)) ‹-

Arrays или Object, которые соответствуют требованиям функтора в функциональном программировании, соответствуют описанию в заголовке, а также описанию функтора.

Ресурсы без категорий, которые я нашел полезными









Я наткнулся на Профессор Фрисби представляет составной функциональный JavaScript, когда пытался найти ресурсы для решения терминов функционального программирования, которые я не мог понять, прочитав PureScript на примере ¹.

У меня есть плохая привычка (которая иногда окупается): когда я читаю что-то новое для меня, я склонен зацикливаться на первой новой концепции, которую я не могу понять, вместо того, чтобы читать (или бегло просматривать) ресурс, отмечая свои знания. пробелы и перечитайте.

В самом первом уроке упоминался функтор идентичности, поэтому я начал гуглить, что такое функтор. По данным Википедии:

В математике функтор - это тип отображения между категориями, возникающий в теории категорий. Функторы можно рассматривать как гомоморфизмы между категориями. В категории малых категорий функторы можно рассматривать в более общем смысле как морфизмы.

Единственная новая информация, которую это дало мне, заключалась в том, что я понятия не имел, что такое гомоморфизмыморфизмы в целом).

Гомоморфизмы

Определение гомоморфизма в Google является общим, но оно помещает вещи в контекст:

преобразование одного набора в другое, сохраняющее во втором наборе отношения между элементами первого.

Википедия говорит, что это

представляет собой сохраняющее структуру отображение между двумя алгебраическими структурами одного типа (такими как две группы, два кольца или два векторных пространства).

(…)

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

Вперед к морфизмам.

Морфизмы

По данным Википедии

морфизм относится к сохраняющей структуру карте от одной математической структуры к другой.

Практически то же самое, что и гомоморфизм, но более общий характер. Он продолжает говорить, что

В теории категорий морфизм - это в целом аналогичная идея, но несколько более абстрактная: задействованные математические объекты не обязательно должны быть наборами, и отношения между ними могут быть чем-то более общим, чем карта.

Изучение морфизмов и структур (называемых объектами), над которыми они определены, занимает центральное место в теории категорий. Большая часть терминологии морфизмов, а также лежащая в их основе интуиция происходит от конкретных категорий, где объекты - это просто наборы с некоторой дополнительной структурой, а морфизмы - это сохраняющие структуру функции. В теории категорий морфизмы иногда также называют стрелками.

Последнее предложение мне очень помогло, потому что я нашел это выражение в Haskell и других учебных пособиях по функциональному программированию. Итак, просто чтобы запомнить:

морфизм === стрелка

Часть, которую я упустил при первом запуске, касалась того, что такое категории, и очень упрощенный взгляд на них в соответствии с статьей.

Категория C состоит из двух классов: одного из объектов, а другого морфизмов.

С каждым морфизмом связаны два объекта: источник и цель.

Для многих общих категорий объекты - это множества (обычно с большей структурой), а морфизмы - это функции от одного объекта к другому. Поэтому источник и цель морфизма часто называют доменом и codomain соответственно.

Морфизм идентичности против функтора идентичности















  1. ^ Введение Фила Фримена в PureScript превосходно, но мне было трудно следить за ним, потому что мне приходилось останавливаться после каждого предложения. Было очевидно, что мне нужно усвоить основы.