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