<div dir="ltr">The type signature of bind (>>=) is as follows:<div><br></div><div>(>>=) :: m a -> (a -> m b) -> m b</div><div><br></div><div>One interpretation of this could be as follows: </div><div>bind takes two parameters (m a & f) and returns m b (the same type returned by f)</div><div><br></div><div>So extending this interpretation - can I swap the two parameters (?)</div><div><br></div><div>Now my new hypothetical interpretation becomes:<br><br>(>>=) :: (a -> m b) -> m a -> m b</div><div><br></div><div>If i further add parens:<br><br>(>>=) (a -> m b) -> (m a -> m b)</div><div><br></div><div>This allows me to slightly tweak my interpretation:</div><div><br></div><div>bind takes one param f (of type a -> m b) and returns another param f (of type m a -> m b)</div><div><br></div><div>This feels like a more intuitive way to think about Monads - am I on the right track?</div><div>(not that I want to switch the params permanently - just trying to get a feel for monads)</div></div>