<div dir="ltr">In general, if you want to <b>dynamically generate</b> actions depending on the result of an earlier action you will always encounter join/(>>=).<br>For example (with ReadPrec/Parser): <br>I want to first parse a character, and then parse the same character two more times.<br>numberAndThenThatManyAs = join (fmap (\c -> satisfy (==c) *> satisfy (==c)) char)<br><br>Of note:<br>* The example is contrived for simplicity's sake, but you do really need a Monad (and hence join) to perform stuff like this in general. A more practical example would be parsing command-line options that depend on previous options.<br>* Obviously it's way more humane to write this with do-syntax. (or (>>=) or something) - do { c <- char; satisfy (==c); satisfy (==c) }<br>* I'm not actually sure whether you need a Monad in this situation, maybe you could get away with just <a href="http://hackage.haskell.org/package/selective-0.3">selectives</a><br><br>=======<br>Georgi</div>