The <span class="fixed">Control.Monad.Writer</span> module exports 
the <span class="fixed">Writer w a</span> type along with its <span class="fixed">Monad</span> instance<br><br><div style="margin-left: 40px;"><span style="font-family: courier new,monospace;"><span class="keyword2">newtype</span><span> </span><span class="type_constructors">Writer</span><span> w a</span><span class="common_operators"> = </span><span class="type_constructors">Writer</span><span> { runWriter</span><span class="syntax_operators"> :: </span><span>(a, w) }  </span></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;"><span style="color: rgb(51, 102, 255);" class="keyword2">instance</span><span style="color: rgb(51, 102, 255);"> (</span><span style="color: rgb(51, 102, 255);" class="type_constructors">Monoid</span><span style="color: rgb(51, 102, 255);"> w)</span><span style="color: rgb(51, 102, 255);" class="syntax_operators"> =&gt; </span><span style="color: rgb(51, 102, 255);" class="type_constructors">Monad</span><span style="color: rgb(51, 102, 255);"> (</span><span style="color: rgb(51, 102, 255);" class="type_constructors">Writer</span><span><span style="color: rgb(51, 102, 255);"> w)</span> </span><span class="keyword2">where</span><span>  </span></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    return x<span class="common_operators"> = </span><span class="type_constructors">Writer</span><span> (x, mempty)  </span></span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    (<span class="type_constructors">Writer</span><span> (x,v))</span><span class="common_operators"> &gt;&gt;= </span><span>f</span><span class="common_operators"> = </span><span class="keyword">let</span><span> (</span><span class="type_constructors">Writer</span><span> (y, v&#39;))</span><span class="common_operators"> = </span><span>f x </span><span class="keyword">in</span><span> </span><span class="type_constructors">Writer</span><span> (y, v </span><span class="common_operators">`mappend`</span><span> v&#39;)</span></span><br>

</div><br>My question is<br>Why the signature is &quot;Monad (Write w)&quot; but neither &quot;Monad Write&quot; nor &quot;Monad (Write w a)&quot;?<br>Any difference among those three styles?<br><br>Thanks a lot!<br>-Haisheng<br>