On Tue, Jan 13, 2009 at 5:19 PM, Dan Doel <span dir="ltr">&lt;<a href="mailto:dan.doel@gmail.com">dan.doel@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Tuesday 13 January 2009 5:51:09 pm Luke Palmer wrote:<br>
&gt; On Tue, Jan 13, 2009 at 11:21 AM, Tim Newsham &lt;<a href="mailto:newsham@lava.net">newsham@lava.net</a>&gt; wrote:<br>
&gt; &gt; I have seen several libraries where all functions of a monad have the<br>
&gt; &gt;<br>
&gt; &gt;&gt; monadic result (), e.g. Binary.Put and other writing functions. This is<br>
&gt; &gt;&gt; a clear indicator, that the Monad instance is artificial and was only<br>
&gt; &gt;&gt; chosen because of the &#39;do&#39; notation.<br>
&gt; &gt;<br>
&gt; &gt; Maybe that was the initial reason, but I&#39;ve actually found the<br>
&gt; &gt; Binary.Put.PutM (where Put = PutM ()) to be useful. &nbsp;Sometimes<br>
&gt; &gt; your putter does need to propogate a result...<br>
&gt;<br>
&gt; But that&#39;s the whole point of Writer! &nbsp;Take a monoid, make it into a monad.<br>
&gt; Put as a monad is silly.<br>
<br>
</div></div>You mean it should be Writer instead?</blockquote><div><br>Or rather, PutM should not exist (or be exposed), and Put should just be a monoid.<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
When GHC starts optimizing (Writer Builder) as well as it optimizes PutM, then<br>
that will be a cogent argument. Until then, one might argue that it misses<br>
&quot;the whole point of Put&quot;.</blockquote><div><br>Well it can still serve as an optimization over bytestrings using whatever trickery it uses (I am assuming here -- I am not familiar with its trickery), the same way DList is an optimization over List.&nbsp; It&#39;s just that its&nbsp; monadiness is superfluous.<br>
<br>Surely PutM and Writer Put have almost the same performance?!&nbsp; (I am worried if not -- if not, can you give an indication why?)<br><br>Luke</div></div>