Что такое класс типов Comonad в Haskell? - PullRequest
103 голосов
/ 08 декабря 2011

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

Монады.

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

Ответы [ 2 ]

78 голосов
/ 08 декабря 2011

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

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

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

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

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

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 в этот слот, результатом является стрелка идентификации.Законы одинаковы, «просто с стрелками перевернутыми».Это супер ручной ответ, но, надеюсь, он даст некоторое представление.

...