title: Monads with Join() instead of Bind()
body: <p>Monads are usually explained in turns of <code>return</code> and <code>bind</code>. However, I gather you can also implement <code>bind</code> in terms of <code>join</code> (and <code>fmap</code>?)</p>
  
  <p>In programming languages lacking first-class functions, <code>bind</code> is excruciatingly awkward to use. <code>join</code>, on the other hand, looks quite easy.</p>
  
  <p>I'm not completely sure I understand how <code>join</code> works, however. Obviously, it has the [Haskell] type</p>
  
  <pre>
  join :: Monad m => m (m x) -> m x
  </pre>
  
  <p>For the list monad, this is trivially and obviously <code>concat</code>. But for a general monad, what, operationally, does this method actually do? I see what it does to the type signatures, but I'm trying to figure out how I'd write something like this in, say, Java or similar.</p>
  
  <p>(Actually, that's easy: I wouldn't. Because generics is broken. ;-) But in principle the question still stands...)</p>
  
  <hr>
  
  <p>Oops. It looks like this has been asked before:</p>
  
  <p><a href="https://stackoverflow.com/questions/3382210/monad-join-function">Monad join function</a></p>
  
  <p>Could somebody sketch out some implementations of common monads using <code>return</code>, <code>fmap</code> and <code>join</code>? (I.e., not mentioning <code>&gt;&gt;=</code> at all.) I think perhaps that might help it to sink in to my dumb brain...</p>