I knew someone was going to catch me wandering into the deep end of the
pool!
Having read large parts of your blog, I would never presume to tell you
anything about Haskell or category theory, but what the hell...
> I mostly sympathise with your rant, but I think you need to be clearer
> about what exactly is concatenated. In general you can't concatenate
> Monads. What you *can* concatenate are Kleisli arrows (ie. things of
> type Monad m => a -> m b). You can also apply Kleisli arrows to
> Monads, and that's what >>= does.
>
> I feel that talking about Monads without Kleisli arrows is like
> talking about category theory without arrows, or at least sets without
> functions. In each case, without the latter, the former is more or
> less useless.
OK, I'll be clearer. I did actually mean Kleisli arrows, though I
disagree about your statement about concatenating monad instances and
claims of "useless":
Prelude> print "Hello" >> return 3
"Hello"
3
Granted, >> is not as "general" as >>=, so combining one monad instance
with another is not as "general" as with a Kleisli arrow: concatenating
degenerates to simple sequencing.
Sequencing print statements is more rather than less useless to many
people, but I see your point. Actually, you have made my point! :)
The forgetful action of Kleisli arrows acting on a monad (or conversely
the free algebra of a monad as a subspace of Kleisli arrows) is to my
understanding intimately connected with the specialness of the IO monad.
It is the continuous nature of Haskell monads that gives non-IO monads
value. So I guess my rant really was about Kleisli arrows not all being
forgetful functors, used only for their sequencing effect. It just
sounded too hard to pull that argument off without reinforcing the myth
that you need to know category theory to have a rant about Haskell
tutorials.
> Also, I'm having a terminological difficulty that maybe someone can
help with:
>
> 'Monad' is a type class.
Actually I thought it was a type class constructor. The monad Monad m =>
m a is continuous in its instance type a, which is important in
establishing the relationship between >>= and >>. The Haskell type 'IO
()' is a monad instance that is also isomorphic to the discrete trivial
monad, but that is not a Haskell Monad capital-M.
I used the term "instance" because the type IO () is an instance of the
typeclass IO, not for any more profound reason.
Forgive the display of wanton ignorance above. After all, isn't that
what ranting is all about?
Dan Weston
Dan Piponi wrote:
On 8/1/07, Dan Weston <[EMAIL PROTECTED]> wrote:
The moral of the story is that monads are less than meets the eye. You
can create them and concatenate them
I mostly sympathise with your rant, but I think you need to be clearer
about what exactly is concatenated. In general you can't concatenate
Monads. What you *can* concatenate are Kleisli arrows (ie. things of
type Monad m => a -> m b). You can also apply Kleisli arrows to
Monads, and that's what >>= does.
I feel that talking about Monads without Kleisli arrows is like
talking about category theory without arrows, or at least sets without
functions. In each case, without the latter, the former is more or
less useless.
Also, I'm having a terminological difficulty that maybe someone can help with:
'Monad' is a type class.
So what's 'IO'? Is the correct terminology 'instance' as in 'IO is an
instance of Monad'. I consider 'IO' to be 'a monad' as that fits with
mathematical terminology. But what about an actual object of type 'IO
Int', say? Some people have been loosely calling such an object 'a
monad'. That doesn't seem quite right. Maybe it's 'an instance of IO
Int', though that's stretching the word 'instance' to meaning two
different things. And if an object of type IO Int is in instance of IO
Int, is it reasonable to also call it an 'instance of IO', or even 'an
instance of Monad'? I'm sure there are proper words for all these
things if someone fills me in.
--
Dan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe