Monads with Join() instead of Bind()

Posted by MathematicalOrchid on Stack Overflow See other posts from Stack Overflow or by MathematicalOrchid
Published on 2012-06-27T20:50:45Z Indexed on 2012/06/27 21:16 UTC
Read the original article Hit count: 143

Filed under:
|

Monads are usually explained in turns of return and bind. However, I gather you can also implement bind in terms of join (and fmap?)

In programming languages lacking first-class functions, bind is excruciatingly awkward to use. join, on the other hand, looks quite easy.

I'm not completely sure I understand how join works, however. Obviously, it has the [Haskell] type

join :: Monad m => m (m x) -> m x

For the list monad, this is trivially and obviously concat. 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.

(Actually, that's easy: I wouldn't. Because generics is broken. ;-) But in principle the question still stands...)


Oops. It looks like this has been asked before:

Monad join function

Could somebody sketch out some implementations of common monads using return, fmap and join? (I.e., not mentioning >>= at all.) I think perhaps that might help it to sink in to my dumb brain...

© Stack Overflow or respective owner

Related posts about haskell

Related posts about monads