>>8I second that
>>9Haskell types do not form a category because of bottoms. Thus Haskell monads are not endofunctors and it's even impossible to express the specification that a member of the monad class must satisfy the monad laws. Such a thing is possible with dependent types only, e.g. in Agda.
However you should also read the "Fast&loose reasoning" paper by some really cool Swedes:
http://www.cse.chalmers.se/~nad/publications/danielsson-et-al-popl2006.htmlThey show that the lack of mathematical rigor is not so bad and build an actual category within Haskell.