Чем «моноид на аппликативных функторах» отличается от «моноида в категории эндофункторов»? - PullRequest
0 голосов
/ 24 апреля 2018

Возможно, ни одно из этих утверждений не является категорически точным, но монаду часто определяют как «моноид в категории эндофункторов»; Haskell Alternative определяется как «моноид аппликативных функторов», где аппликативный функтор является «сильным слабым моноидальным функтором». Теперь эти два определения звучат довольно похоже на невежественных (меня), но работают значительно по-разному. Нейтральный элемент для альтернативы имеет тип f a и поэтому является «пустым», а для монады имеет тип a -> m a и, таким образом, имеет смысл «непустой»; операция для альтернативы имеет тип f a -> f a -> f a, а операция для монады имеет тип (a -> f b) -> (b -> f c) -> (a -> f c). Мне кажется, что действительно важная деталь - в категории эндофункторов против по сравнению с эндофункторами , хотя, возможно, важна деталь "сильной слабости" в альтернативе; но вот где я запутался, потому что, по крайней мере, в Хаскеле монады оказываются альтернативами: и я вижу, что у меня пока нет четкого категоричного понимания всех деталей здесь.

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

В общем, моноид определяется в моноидальной категории, которая является категорией, которая определяет какое-то (тензорное) произведение объектов и единичного объекта.

Самое главное, категория типов является моноидальной: произведение типов a и b представляет собой просто тип пар (a, b), а тип единицы измерения - ().

Моноид затем определяется как объект m с двумя морфизмами:

eta :: () -> m
mu  :: (m, m) -> m

Обратите внимание, что eta просто выбирает элемент m, поэтому он эквивалентен mempty, и карриmu становится mappend обычного класса Haskell Monoid.

Так что это категория типов и функций, но есть также отдельная категория эндофункторов и естественных преобразований.Это также моноидальная категория.Тензорное произведение двух функторов определяется как их состав Compose f g, а единица - единичный функтор Id.Моноид в этой категории - монада.Как и раньше, мы выбираем объект m, но теперь это endofunctor;и два морфизма, которые теперь являются естественными преобразованиями:

eta :: Id ~> m
mu  :: Compose m m ~> m

В компонентах эти два естественных преобразования становятся:

return :: a -> m a
join :: m (m a) -> m a

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

Alternative - семейство моноидов в категории типов (не эндофункторы).Это семейство генерируется аппликативным функтором f.Для каждого типа a у нас есть моноид, чей mempty является элементом f a и чей mappend отображает пары f a в элементы f a.Эти полиморфные функции называются empty и <|>.

В частности, empty должно быть полиморфным значением, то есть одним значением на каждый тип a.Это, например, возможно для функтора списка, где пустой список полиморфен в a, или для Maybe с полиморфным значением Nothing.Обратите внимание, что это все полиморфные типы данных, которые имеют конструктор, который не зависит от параметра типа.Интуиция заключается в том, что, если вы думаете о функторе как о контейнере, этот конструктор создает и пустой контейнер.Пустой контейнер автоматически становится полиморфным.

0 голосов
/ 25 апреля 2018

Оба понятия связаны с идеей «моноидальной категории», которая является категорией, в которой вы можете определить концепцию моноида (и некоторых других видов алгебраических структур).Вы можете думать о моноидальных категориях как: категория определяет абстрактное понятие функций одного аргумента; моноидальная категория определяет абстрактное понятие функций нулевых или множественных аргументов.

Монада - это моноид в категории эндофункторов;другими словами, это моноид, в котором произведение (функция с 2 аргументами) и тождество (функция с 0 аргументами) используют концепцию функции с несколькими аргументами, определяемой определенной (причудливой) моноидальной категорией (моноидальной категорией эндофункторов).и состав).

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

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

...