I&#39;d like to have a (,)-style writer instance alongside the (-&gt;)-based reader instance for Monad in <tt>Control.Monad.Instances</tt>.

<p>
Here&#39;s the current reader:
</p>
<pre style="margin-left: 40px;" class="wiki">instance Monad ((-&gt;) r) where<br>    return = const<br>    f &gt;&gt;= k = \ r -&gt; k (f r) r<br></pre><p>
and my proposed writer:
</p>
<pre style="margin-left: 40px;" class="wiki">instance Monoid o =&gt; Monad ((,) o) where<br>    return = pure<br>    (o,a) &gt;&gt;= f = (o `mappend` o&#39;, a&#39;) where (o&#39;,a&#39;) = f a<br></pre><p>
where the <tt>return</tt> definition relies on the Applicative instance of <tt>((,) o)</tt>.  Written out explicitly,
</p>
<pre style="margin-left: 40px;" class="wiki">    return a = (mempty,a)<br></pre><p>
<tt>Control.Monad.Instances</tt> will also need two new imports:
</p>
<pre style="margin-left: 40px;" class="wiki">import Data.Monoid (Monoid(..))<br>import Control.Applicative (pure)<br></pre><br>Suggested review period: two weeks (ending Dec 16).<br><br>Comments?<br><br>&nbsp; - Conal<br>