Что такое class Comonad в Haskell?
Что такое class Comonad в Haskell? Как и в Comonad от Control.Comonad в пакете comonad (объяснения любых других пакетов, которые предоставляют class Comonad, также приветствуются). Я смутно слышал о Comonad, но все, что я действительно знаю об этом, это то, что предоставляет extract :: wa -> a
, вроде параллели с return :: a -> ma
Monad return :: a -> ma
.
Бонусные баллы за то, что они заметили использование «реальной жизни» Comonad в «реальном» коде.
- Проверьте, является ли тип экземпляром Show в Haskell?
- Сравнение функций в Haskell
- Существуют ли объявляемые имена для обычных операторов Haskell?
- Как составить `не` с функцией произвольной arity?
- Haskell: списки, массивы, векторы, последовательности
- Многострочные команды в GHCi
- Функция определяется специальными случаями в GHCi
- Конечное понимание бесконечного списка
- Объясните этот fragment кода Хеккеля, который выводит stream простых чисел
- Почему я не должен смешивать вкладки и пробелы?
- Что (f.). g означает в Haskell?
- Когда разница между quotRem и divMod полезна?
- Почему Хаскелл не выполняет эти действия?
Эти ссылки могут быть полезны:
- Оценка клеточных автоматов является comonadic . В частности, «всякий раз, когда вы видите большие структуры данных, собранные из множества небольших, но похожих вычислений, есть хороший шанс, что мы имеем дело с comonad».
- Последовательности, streamи и сегменты
- Комонад в повседневной жизни
Это не полностью отвечает на мой вопрос, но я хотел бы поместить некоторую релевантную информацию в формат ответа:
«co» (свободно) означает «перевернуть стрелки». Вот пример этого.
Рассмотрим монадические операции:
return :: a ~> ma flip (>>=) :: (a ~> mb) -> (ma ~> mb)
Переверните стрелки с короткой стрелкой, и вы получите comonadic операции:
extract :: a <~ wa extend :: (a <~ wb) -> (wa <~ wb)
(Написано обычными стрелками)
extract :: wa -> a extend :: (wa -> b) -> wa -> wb
Обратите внимание, что в этом формате return
- это стрелка, которая так просто подходит для слота аргументов для flip (>>=)
, и то же самое относится к extract
и extend
. В законах Монады / Комонады говорится, что когда вы return
или extract
в этот слот, результатом является стрелка идентификации. Законы одинаковы, «просто с перевернутыми стрелами». Это супервалютный ответ, но, надеюсь, он дает некоторое представление.