Вопрос по haskell – Различия между функторами и эндофункторами

42

Может кто-нибудь объяснить простыми словами разницу между ними? Я не совсем понимаю, в какой части монады являются эндофункторами, а не просто функторами.

Ваш Ответ

1   ответ
54

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

То же, что и с эндоморфизмами против морфизмов.

А почему монады должны быть эндофункторами?

Есть известная цитата, что «Монады - это просто моноиды в категории эндофункторов». К счастью, кто-то уже объяснил это довольно хорош в этом ответе.

Ключевым моментом, почему монада должна быть эндофункцией, является то, чтоjoin, как это называется в Haskell, илиµ, как это обычно называют в теории категорий, является частью определения монады. В настоящее врем

Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a

так что результат применения функтораm для объекта (в Hask, категория типов Haskell как объектов и функций как морфизмов, типа) должна быть объектом, которыйm можно снова применить к. Это означает, что он должен принадлежать к категории, которая является доменом функтораm.

Функтор может быть составлен сам с собой, если его домен и кодомен одинаковы [строго, если его кодомен является подкатегорией его домена], другими словами, если он является эндофунктором. Поскольку сочетаемость с самим собой является частью определения монады, монады являются тем более эндофункторами.

¹ Одно определение, можно определить монаду, используя(>>=) илиbind и имеютjoin как производное свойство.

Правильно, все функторы Хаскелла эндо. Daniel Fischer
Неэндофункторы доступны в таких пакетах, как Hackage.haskell.org / пакеты / архив / категории / 1,0 / DOC / HTML / ... sdcvvc
Есть ли в Хаскеле функторы, которые не являются эндофункторами? (Разве все они не отображают Hask в Hask?) huon
@ JonathanDunlap Мне только что пришло в голову, вы ошиблись и действительно имели в виду Монады а не моноиды? Например, «Монады - моноиды в категории эндофункторов», или что за пословица была? Daniel Fischer
@ JonathanDunlap Хорошо, собираюсь обновить ответ соответственно (это займет некоторое время, хотя я медленно). Моноиды - это другой тип зверя, просто некоторые функторы (например, монады) также являются моноидами (в некоторой категории). Вроде случайный. Daniel Fischer

Похожие вопросы