411 REFERENCE · Wikibooks
Haskell/Comonads
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Let’s compare the monad with the comonad. A monad provides a way of putting
a value in a container using return. It doesn’t give you access to a value or values
stored inside. Of course, data structures that implement monads might provide
access to their contents, but that’s considered a bonus. There is no common in-
terface for extracting values from a monad. And we’ve seen the example of the
IO monad that prides itself in never exposing its contents.
A comonad, on the other hand, provides the means of extracting a single
value from it. It does not give the means to insert values. So if you want to think
of a comonad as a container, it always comes pre-filled with contents, and it lets
you peek at it.