Что такое класс типов Comonad в Haskell?

Что такое класс типов Comonad в Haskell? Как и в Comonad из Control.Comonad в пакете comonad (объяснения любых других пакетов, которые предоставляют класс типов Comonad, также приветствуются). Я смутно слышал о Comonad, но все, что я действительно знаю об этом, это что обеспечивает extract :: w a -> aсвоего рода параллель с Монадой return :: a -> m a,

Бонусные баллы за то, что вы отметили "реальное" использование Comonad в "реальном" коде.

2 ответа

Решение

Эти ссылки могут быть полезны:

  1. Оценка клеточных автоматов комонадна. В частности, "всякий раз, когда вы видите большие структуры данных, соединенные из множества небольших, но похожих вычислений, есть хороший шанс, что мы имеем дело с комонадой".
  2. Последовательности, потоки и сегменты
  3. Комонады в повседневной жизни

Это не полностью отвечает на мой вопрос, но я хотел поместить некоторую соответствующую информацию в формате ответа:

"со" (свободно) означает "перевернуть стрелки". Вот грубое визуальное представление об этом.

Рассмотрим монадические операции:

return :: a ~> m a
flip (>>=) :: (a ~> m b) -> (m a ~> m b)

Поменяйте местами волнистые стрелки, и вы получите запятую:

extract :: a <~ w a
extend :: (a <~ w b) -> (w a <~ w b)

(Написано обычными стрелками)

extract :: w a -> a
extend :: (w a -> b) -> w a -> w b

Обратите внимание, как в этом формате, return это стрелка, которая просто так вписывается в слот аргумента для flip (>>=)и то же самое относится и к extract а также extend, Законы монады / комонада говорят, что когда вы кладете return или же extract в этот слот, в результате стрелка идентичности. Законы одинаковы, "только с стрелками перевернутыми". Это супер ручной ответ, но, надеюсь, он даст некоторое представление.

Другие вопросы по тегам