title: why are the state and reader monads functions while the writer monad is a tuple?
body: <p>I'm a Haskell newbie, and I think I understand monads and their mechanics (at least for the list, state, maybe, writer and reader monads), but I want to understand why they have been defined the way they have, or why they have to be the way they are, to aid in my intuition in thinking about them.</p>
  
  <p>Specifically, what is it about reading that makes the reader or state monads need to be functions (i.e. <code>\s -&gt; (a,s)</code> ), and not just data like the writer monad (i.e. <code>(w,a)</code> )?</p>
  
  <p>Also, could a writer monad be used as a state monad, where the log is used as a string representation of state, as long as the <code>MonadPlus</code> functionality is not used?  Is the monadic function used with writer monads allowed to look at the current log and modify if at will, or is it only the writer monad's bind function that is allowed to look at the log?</p>
  
  <p>Also, why are monads defined in terms of monadic functions that with type <code>a -&gt; m b</code>, instead of with type <code>m a -&gt; mb</code>?  What's so natural about a function going from a base type to a monad wrapped type?</p>
  
  <p>Thanks for your answers.</p>