Here's my interpretation of the table:
----------------------------------------------------------------------
Structure | Subject | Action | Verb | Result
------------+----------+------------+------------+----------
function | a | a->b | flip ($) | b
Functor | f a | a->b | <$> | f b
Applicative | f a | f (a->b) | flip <*> | f b
Monad | m a | a->m b | >>= | m b
Comonad | w a | w a->b | =>> | w b
Arrow | a b c | a c d | >>> | a b d
----------------------------------------------------------------------
Nice
Kim-Ee Yeoh wrote:
> ... I think you'll find that each of those structures have their
> privileged place in your code.
Agreed. I'm still a beginner; I'm not sure how to choose one
structure over another, at least not yet. But that's because ...
> Monads are undoubtedly more pervasive, and that could be because there
> aren't as many arrow and comonad tutorials, atomic ones or otherwise.
And I'm trying to say that these shouldn't be separate tutorials at all - its
much more instructive to compare and contrast.
Moreover, Comonad isn't even in the standard libraries (Hoogle returns
no results for it).
When I searched for tutorials on monads, I found lots of them. In
fact, I have heard that writing (yet another) monad tutorial is part
of standard Haskell initiation.
Thats what I was doing above :-)
....
One thing that I keep seeing people say (not you), is that monads /sequence/ side effects. This is wrong, or at