&gt; if one day you decide you need an agent that generates random numbers<br><br>I could say that my agents now run in a certain monad, I just would have to transform my basic agents to :<br>agent1 = liftM . fmap (*2)<br>
<br>(or even agen1 = fmap . fmap (*2), however it is less readable IMO)<br><br><br>Thanks for your comments.<br><br><div class="gmail_quote">2010/12/15 Edward Z. Yang <span dir="ltr">&lt;<a href="mailto:ezyang@mit.edu">ezyang@mit.edu</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">It sounds like a good fit for your problem as stated.  One thing to note<br>
is that Haskell will give you great abstractions for very strong amounts<br>
of code, as long as what you want to do is a good fit for the abstraction.<br>
Haskell makes it quite hard to fit a square peg into a round hole, so<br>
if one day you decide you need an agent that generates random numbers,<br>
you can either do dangerous stuff with unsafeInterleaveIO or you&#39;ll need<br>
to find a more flexible abstraction.<br>
<br>
Cheers,<br>
<font color="#888888">Edward<br>
</font></blockquote></div><br>