Dear List,

I am quite new in Haskell's categorical manner of programming. However I have enough knowledge in Category Theory.
I want to ask a question, maybe very well-known one by some of you, about monads of Haskell.

For the type constructors like Maybe and [], I managed to prove that together with 2 natural transformations (bind + return), both of these triples construct a monad. But when I try to prove that IO and Cont type constructors with the same natural transformations (bind + return) are monads as well, it was failed.

Here my question is: Is there anyone who knows how to prove that IO and Cont are monads with satisfing following properties:

  1. join . fmap join = join . join
  2. join . fmap return = join . return = id
  3. return . f = fmap f . return
  4. join . fmap (fmap f) = fmap f . join

Thanks already now,
Burak Ekici.