Какая связь между моноидом и функтором? - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь понять связь между функтором и моноидом. Они часто упоминаются вместе, но я не смог соединить точки.

Я понимаю, что, говоря проще, при программировании моноид можно рассматривать как структуру или тип данных с ассоциативной функцией добавления / конкатата, используемой для объединения элементов в структуре, а также элемента идентичности, где, если выКоммутативно комбинируя значение идентификатора с элементом в вашей структуре, он всегда будет возвращать один и тот же элемент.

Я также признаю, что при программировании функтор можно рассматривать как структуру, подобную коллекции, с операцией отображения, аналогичной Array.prototype.map().

Может ли кто-нибудь помочь мне увидеть общую картину здесь? Также, пожалуйста, дайте мне знать, если мне что-то не хватает в моем понимании этих понятий.

1 Ответ

0 голосов
/ 29 октября 2019

Оба эти термина пришли из теории категорий - математического раздела, который изучает категории элементов, отношения между ними и сочетаемость функций между элементами. Эта дисциплина имеет сильное влияние в функциональном программировании, и поэтому обычно эти термины появляются в дискуссиях об этой парадигме.

На практике перевод терминов функтор и моноид в программирование следующий:

Функтор сохраняет структуру и отношения между элементами двух разных категорий, это означает, что Функтор - это «структура», которая предоставляет конструктор одного элемента. (Сохраняет структуру, потому что каждый элемент отображается в элементдругая категория) и функция карты (сохраняет отношения «функции», отображающие каждую функцию исходной категории в целевую)

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

...