I think I&#39;ve just about got monads figured out, but there&#39;s one detail that still escapes me.&nbsp; As I understand it, a monad is a kind of programming trick the uses data dependency to force evaluation order.&nbsp; x &gt;&gt;= f means apply f to x; since the value of f x depends on the value of x, the evaluator must evaluate x before f x. However, consider:<br>
<br>&nbsp;&nbsp;&nbsp; getChar &gt;&gt;= \x -&gt; getChar<br><br>An optimizer can see that the result of the first getChar is discarded and replace the entire expression with one getChar without changing the formal semantics.&nbsp; But that would change the behavior, so to get the desired behavior, there must be some principle that prevents this from happening, ensuring that x &gt;&gt;= f always evaluates f x. <br>
<br>I can see that the monad laws ensure this But I haven&#39;t found anything that states this.&nbsp; Am I missing something?<br><br>Thanks,<br><br>gregg<br>