Комониды упоминаются, например, в Haskell distributive
docs:
Из-за отсутствия нетривиальных комоноидов в Haskell мы можем ограничиться требованием функтора, а не некоторого класса Coapplicative.
После небольшого поиска я нашел ответ qaru.site/info/195226/..., который объясняет это немного больше с законами, которые должны были бы удовлетворять комониды. Поэтому я думаю, что понимаю, почему существует только один возможный экземпляр гипотетического Comonoid typeclass в Haskell.
Таким образом, чтобы найти нетривиальный comonoid, я предполагаю, что нам придется искать в какой-то другой категории. Конечно, если у теоретиков категории есть имя для комонидов, то есть некоторые интересные. Другие ответы на этой странице, похоже, намекают на пример с участием Supply
, но я не мог понять, что все еще удовлетворяет законам.
Я также обратился к Википедии: там есть страница для моноидов, которая не ссылается на теорию категорий, которая кажется мне адекватным описанием класса Haskell Monoid
, но "comonoid" перенаправляет на теоретико-категориальное описание моноидов и соноиды вместе, которые я не могу понять, и до сих пор нет интересных примеров.
Итак, мои вопросы:
- Можно ли объяснять комониды в категориальных терминах, таких как моноиды?
- Что такое простой пример интересного комонида, даже если он не тип Haskell? (Можно ли найти в категории Клейсли над знакомой монадой Хаскелла?)
edit: Я не уверен, действительно ли это теоретически правильно, но то, что я представлял в скобках вопроса 2, было нетривиальным определением delete :: a -> m ()
и split :: a -> m (a, a)
для некоторых конкретных Типа Haskell a
и монады Haskell m
, которые удовлетворяют вариантам колеоидов Kleisli-стрелок в связанном ответе. Другие примеры комонидов по-прежнему приветствуются.