Hello,<br><span class="gmail_quote"></span><br><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>
I think that whole &quot;program flow&quot; thing is something you get used to.&nbsp; In true, pure functional programming (i.e. Haskell) &quot;program flow&quot; is a meaningless term, basically.&nbsp; Haskell is a declarative language, not an imperative one.&nbsp; You have to learn to give up that control and trust the runtime to Do The Right Thing.&nbsp; (In this regard it&#39;s similar to logic programming languages.)
</div></blockquote><div><br>I think it&#39;s important/useful to point out that &quot;program flow&quot; in a pure functional language is really a matter of data dependency. The compiler is only free to arbitrarily order computations if there are no data dependencies. Furthermore, monads are not special in any way (they are after all just a useful set of combinators; 
e.g. <a href="http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html">http://sigfpe.blogspot.com/2006/08/you-could-have-invented-monads-and.html</a>); they only wind up sequencing computations because they set up a data dependency between the two arguments of the bind operator.
<br><br>-Jeff<br><br></div></div><br>