Что такое класс типов Comonad в Haskell?
Что такое класс типов Comonad в Haskell? Как и в Comonad из Control.Comonad в пакете comonad (объяснения любых других пакетов, которые предоставляют класс типов Comonad, также приветствуются). Я смутно слышал о Comonad, но все, что я действительно знаю об этом, это что обеспечивает extract :: w a -> a
своего рода параллель с Монадой return :: a -> m a
,
Бонусные баллы за то, что вы отметили "реальное" использование Comonad в "реальном" коде.
2 ответа
Эти ссылки могут быть полезны:
- Оценка клеточных автоматов комонадна. В частности, "всякий раз, когда вы видите большие структуры данных, соединенные из множества небольших, но похожих вычислений, есть хороший шанс, что мы имеем дело с комонадой".
- Последовательности, потоки и сегменты
- Комонады в повседневной жизни
Это не полностью отвечает на мой вопрос, но я хотел поместить некоторую соответствующую информацию в формате ответа:
"со" (свободно) означает "перевернуть стрелки". Вот грубое визуальное представление об этом.
Рассмотрим монадические операции:
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
в этот слот, в результате стрелка идентичности. Законы одинаковы, "только с стрелками перевернутыми". Это супер ручной ответ, но, надеюсь, он даст некоторое представление.