Haskell monad bind operator type In Haskell, the Monads type class has the bind operator, which is represented by the symbol &gt;&gt;=

The type of such operator is:

(&gt;&gt;=) :: Monad m =&gt; m a -&gt; (a -&gt; m b) -&gt; m b


Why does the function need to be (a -&gt; m b)? Why functions the preserve che inner data type (a -&gt; m a) are not allowed?

Has this choice been made for some convenience in the language design, or does it have some other reason?
Here's a nice, and accessible, blog on why we need the type to have that form.

http://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/

Also, this blog motivates why we want them this why and how they naturally arise in our daily workings :) 

Enjoy!