<div dir="ltr"><div class="" style="margin:0px 0px 5px 5px;padding:0px;border:0px;font-size:13.600000381469727px;vertical-align:baseline;width:660px;line-height:17.600000381469727px;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif">
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word"></p><h1 style="margin:0px 0px 7px;padding:0px;border:0px;font-size:23.200000762939453px;vertical-align:baseline;font-family:'Trebuchet MS','Liberation Sans','DejaVu Sans',sans-serif;line-height:1.3">
</h1><h1 style="margin:0px 0px 7px;padding:0px;border:0px;font-size:23.200000762939453px;vertical-align:baseline;line-height:1.3"><span style="background-color:transparent;font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;font-size:13.600000381469727px;font-weight:normal;line-height:17.600000381469727px">Hi All:</span></h1>
<h1 style="margin:0px 0px 7px;padding:0px;border:0px;font-size:23.200000762939453px;vertical-align:baseline;line-height:1.3"><span style="background-color:transparent;font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;font-size:13.600000381469727px;font-weight:normal;line-height:17.600000381469727px">How do you define a function of signature h :: M Int -> M Int -> M Int so that h ( M x ) ( M y ) = M ( x + y ), but without unwrapping the value from the monad?</span><br>
</h1><p></p></div><div class="" style="margin:0px 5px 5px 0px;padding:0px;border:0px;font-size:13.600000381469727px;vertical-align:baseline;width:660px;line-height:17.600000381469727px;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif">
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word"></p><h1 style="margin:0px 0px 7px;padding:0px;border:0px;font-size:23.200000762939453px;vertical-align:baseline;font-family:'Trebuchet MS','Liberation Sans','DejaVu Sans',sans-serif;line-height:1.3">
</h1><h1 style="margin:0px 0px 7px;padding:0px;border:0px;font-size:23.200000762939453px;vertical-align:baseline;line-height:1.3"><span style="background-color:transparent;font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;font-size:13.600000381469727px;line-height:17.600000381469727px;font-weight:normal">This question is from the article "Trivial Monad" found at </span><a href="http://blog.sigfpe.com/2007/04/trivial-monad.html" rel="nofollow" style="background-color:transparent;font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;font-size:13.600000381469727px;line-height:17.600000381469727px;font-weight:normal;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(74,107,130);text-decoration:initial">http://blog.sigfpe.com/2007/04/trivial-monad.html</a><span style="background-color:transparent;font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;font-size:13.600000381469727px;line-height:17.600000381469727px;font-weight:normal">. The provided answer is</span></h1>
<p></p></div><div class="" style="margin:0px 5px 5px 0px;padding:0px;border:0px;font-size:13.600000381469727px;vertical-align:baseline;width:660px;line-height:17.600000381469727px;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif">
<pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">h x y </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> x </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">>>=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(\</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">x </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> g x y</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">)</span></code></pre>
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word">or equivalently ( in context of the article )</p><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">h </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> M Int </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> M Int </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> M Int
h x y </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> bind </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">\</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">x</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> g x y </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">)</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> x</span></code></pre>
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word">where g is</p><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">g </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">::</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> Int </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> W Int </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">-></span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> W Int
g x y </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> y </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">>>=</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">return </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">.</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(+</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">x</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">))</span></code></pre>
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word">for the monad:</p><p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word">
<code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">data M a = M a deriving Show</code></p>
<p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both;word-wrap:break-word">Now I am a little confused, how can you put x in g if it takes an <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">Int</code> as first parameter but x is <code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">M Int</code>?</p>
<div><br></div></div><div class="gmail_extra" style>Thanks!
</div></div>