O que é a typeclass Comonad em Haskell? Como em Comonad de Control.Comonad no pacote comonad (explicações de quaisquer outros pacotes que fornecem uma typeclass Comonad também são bem-vindas). Ouvi vagamente sobre o Comonad, mas tudo o que realmente sei sobre ele é que ele fornece extract :: w a -> a
, uma espécie de paralelo com o do Monad return :: a -> m a
.
Pontos de bônus por observar os usos do Comonad na "vida real" no código "real".
return :: a ~> m a
,flip bind :: (a ~> m b) -> (m a ~> m b)
. Reverter os squiggly setas e você começa as operações 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
)Respostas:
Esses links podem ser úteis:
fonte
extend
para ser útil.Isso não responde totalmente à minha pergunta, mas eu queria colocar algumas informações relevantes no formato de resposta:
"co" (vagamente) significa "virar as setas". Aqui está uma visão aproximada disso.
Considere as operações monádicas:
Inverta as setas onduladas e você obterá as operações comuns:
(Escrito com setas normais)
Observe como, neste formato,
return
há uma seta que por acaso se encaixa no slot de argumento paraflip (>>=)
, e o mesmo é verdadeiro paraextract
eextend
. As leis de mônada / comonada dizem que quando você colocareturn
ouextract
entra nesse slot, o resultado é a seta de identidade. As leis são as mesmas, "apenas com as setas viradas". Essa é uma resposta excelente, mas espero que forneça alguns insights.fonte