Что такое класс типов Comonad в Haskell? Как и в Comonad от Control.Comonad в пакете comonad (также приветствуются объяснения любых других пакетов, которые предоставляют класс типов Comonad). Я смутно слышал о Comonad, но все, что я действительно знаю о нем, - это то, что это обеспечивает extract :: w a -> a
, своего рода параллель с Monad return :: a -> m a
.
Бонусные баллы за «реальное» использование Comonad в «реальном» коде.
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Поменяйте волнистые стрелки , и вы получите comonadic операции:extract :: a <~ w a
,extend :: (a <~ w b) -> (w a <~ w b)
(extract :: w a -> a
,extend :: (w a -> b) -> w a -> w b
)Ответы:
Эти ссылки могут быть полезны:
источник
extend
чтобы быть полезным.Это не полностью отвечает на мой вопрос, но я хотел поместить некоторую соответствующую информацию в формате ответа:
«co» (свободно) означает «перевернуть стрелки». Вот примерное изображение этого.
Рассмотрим монадические операции:
Переверните волнистые стрелки, и вы получите комонадные операции:
(Пишется обычными стрелками)
Обратите внимание на то, как в этом формате
return
стрелка помещается в слот аргумента дляflip (>>=)
, и то же самое верно дляextract
иextend
. Законы монад / комонад гласят, что когда вы вставляетеreturn
илиextract
в этот слот, в результате появляется стрелка идентичности. Законы те же, «только стрелки перевернуты». Это очень простой ответ, но, надеюсь, он дает некоторое представление.источник