<div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">   <i>How do you rewrite your code to improve it?</i><br>

</blockquote><div><br>Edward Kmett just introduced one in another thread. Simplifying, it would be this:<br><br>For all x, y, f:<br><br>do { x&#39; &lt;- x ; y&#39; &lt;- y ; return (f x&#39; y&#39;) }<br>--&gt;<br>f &lt;$&gt; x &lt;*&gt; y<br>

<br>This is a great example, because (1) it reduces clutter and &quot;temporary&quot; names and (2) requires significant background knowledge on monads and idioms. We can also generalize this to functions f with increasing arity (f &lt;$&gt; x &lt;*&gt; y &lt;*&gt; z, etc.). Beginners would not get this, but once you know this rule, it can greatly improve your coding style. Similarly with liftM2, liftM3, etc. as mentioned by Stephen.<br>

<br>Any other useful tidbits to share?<br><br>Sean<br></div></div>