Зачем определять единичное естественное преобразование для монады - разве это не подразумевается определением монады как эндофунктора? - PullRequest
3 голосов
/ 11 марта 2011
  1. Монада определена как endofunctor в категории C. Скажем, C имеет тип int и bool и другие созданные типы в качестве объектов.Теперь давайте подумаем о монаде списка, определенной для этой категории.

По самому определению список тогда является endofunctor, он отображает (можно ли это интерпретировать как функцию?) Тип int в List [int] и bool to List [bool] of и отображает (опять-таки функцию?) морфизм int -> bool to List [int] -> List [bool]

Итак, пока это имеет смысл.Но что приводит меня в глубокое замешательство, так это дополнительные определения естественных преобразований, которые должны сопровождать его: a.Единица ..., которая превращает int в List [int] (разве определение функтора List уже подразумевает это? Это одно из основных заблуждений, которое у меня есть

b. Всегда ли функтор List следует понимать какотображение из int в List [int], а не из int в List [bool]?

c. Отличается ли естественное преобразование модуля int в List [int] от map от int до List [int], определяемого определением Listкак функтор? Я полагаю, это просто переформулировка моего предыдущего вопроса.

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Единица - это естественное преобразование функтора Identity на C в List;в общем случае естественное преобразование a: F => G между двумя параллельными функторами F, G: X -> Y состоит из

  1. для каждого объекта x: X области, морфизма a_x: Fx-> Gx
  2. плюс условие естественности, связывающее действие F и G на морфизмы

Вы должны думать о естественном преобразовании, как указано выше, как о способе «перехода» от F кG. Применяя это к вашему устройству для ситуации List, Unit определяет для каждого типа X функцию Unit_X: X -> List [X], и это просто просмотр экземпляров вашего типа как экземпляров List [X] с одним элементом.

Я не понимаю, что вы спрашиваете именно о б.но в отношении с.это совершенно разные вещи.Нет карты от int до List [int], подразумеваемой в определении;то, что дает определение, для каждой карты f: X -> Y - карта List (f): List [X] -> List [Y];то, что дает вам Unit, - это способ просмотра любого типа X как определенного вида списков X, имеющих один элемент.

Надеюсь, это поможет;из используемой вами нотации List [], возможно, вы пришли из Scala / Java, если это так, вы можете найти это введение в теорию категорий в Scala интересным: http://www.weiglewilczek.com/blog/?p=2760

0 голосов
/ 15 февраля 2012

Что действительно сбивает с толку, так это то, что функтор F между Cat A и Cat B определяется как:

отображение:

  1. F отображает от A до F (A) --- означает ли это новый List ()? или почему нет?
  2. и F отображают F (f): F (A) -> F (B)

Вот как я вижу те, которые определены в книгах. Точка № 1 выше (F отображает A в F (A)) - это выглядит как морфизм преобразования A в F (A). Если это так, зачем нам нужно естественное преобразование единиц, чтобы перейти от A к F (A)?

Что очень любопытно, так это то, что определение функтора использует слово map (но не использует слово morphism). Я вижу, что от A до F (A) называется не морфизмом, а отображением.

...