The particular case from which the former is a generalization:<div><br></div><div><div><br></div><div><div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt">

<b><span style="background-color:transparent;color:rgb(57,116,96);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">instance</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(79,67,113);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">Monad</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">m</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> =&gt; </span><span style="background-color:transparent;color:rgb(79,67,113);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">Monoid</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">  (</span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">a</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> -&gt;</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">a</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">) </span><span style="background-color:transparent;color:rgb(57,116,96);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">where</span></b></div>

<div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">    </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">mappend</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> = (.)</span></b></div>

<div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">    </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">mempty  </span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">= </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">id</span></b></div>

<div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"><br>

</span></b></div><div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><span style="color:rgb(0,0,0);font-family:arial;font-size:small;text-align:start">Here the monoid is defined for the functions within the set of values of type a. There are no null elements.</span><br style="color:rgb(0,0,0);font-family:arial;font-size:small;text-align:start">

</div><div><span style="color:rgb(0,0,0);font-family:arial;font-size:small;text-align:start"><br></span></div><div dir="ltr" style="color:rgb(34,34,34);background-color:rgb(255,255,255);text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt">

<br></div><br><div class="gmail_quote">2012/10/24 Alberto G. Corona <span dir="ltr">&lt;<a href="mailto:agocorona@gmail.com" target="_blank">agocorona@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

What hiders according with my experience, the understanding of this generalization are some mistakes. two typical mistakes from my side was to consider an arrow as a function, and the consideration of  m  as a kind of container, which it is not from the point of view of category theory. <div>


<br></div><div>a -&gt; m b</div><div><br></div><div>instead of as a container, &#39;m b&#39; must be considered as the set of elements of type b (wrapped within some constructor) plus zero or more null elements of the monad &#39;m&#39;, Such are elements like, for example, Nothing, the empty list or Left .  so that:</div>


<div><br></div><div>null &gt;&gt;= f= null            and</div><div>f &gt;&gt;= \x -&gt; null= null</div><div><br></div><div>in the other side (-&gt;) is an arrow of category theory, not a function.That means that  there may be weird additional things that functions are not be permitted to have. For example, from an element in the set of &#39;a&#39; may depart many arrows to elements of &#39;b&#39;. This permits the nondeterminism of the list monad. </div>


<div><br></div><div>A function like this:</div><div><br></div><div>repeatN :: Int -&gt; a -&gt; [a]</div><div><br></div><div>can have two interpretations: one functional interpretation, where repeatN is a pure function with results in the list container. The other is the category interpretation, where &#39;repeatN n&#39; is a morphism that produces n arrows from the set of the Strings to the set of String plus the empty set, The list container is a particular case of container that hold the result of this nondeterministic morphism (other instantiations of this nondeterministic monad would be a set monad or whatever monad build using a multielement container. The container type is not the essence. the essence it is the nondeterministic nature, which, in haskell practical terms, needs a multielement container to hold the multiple results).</div>


<div><br></div><div>so the monadic re-ínterpretation of the repeatN signature is:</div><div><br></div><div>repeatN ::Int -&gt; a -&gt; a + {[]}</div><div><br></div><div>Here the empty list is the null element of the list monad</div>


<div><br></div><div>in the same way:</div><div>functional signature:  a -&gt; Maybe b</div><div>monadic interpretation:  a -&gt; b + {Nothing}</div><div><br></div><div>functional signature:  a -&gt; Either c b</div><div>

monadic interpretation:   a -&gt; b + {Left c}</div>
<div><br></div><div>So when i see m b in the context of a monad, I think on nothing more that the set of values of type b (wrapped within some constructor) plus some null elements (if they exist). </div><div><br></div><div>


so in essence</div><div><br></div><div>a -&gt; m b</div><div><br></div><div>is a -&gt; (b + some null elements)</div><div><br></div><div>that´s a generalisation of  a -&gt; b</div><div><br></div><div>where -&gt; is an arrow, not a function (can return more than one result, can return different things on each computation etc)<br>


<br>And this instance of monoid show how kleisly is the composition and return is the identity element</div><div><br></div><div><div dir="ltr" style="text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt">


<b><span style="background-color:transparent;color:rgb(57,116,96);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">instance</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(79,67,113);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">Monad</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">m</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> =&gt; </span><span style="background-color:transparent;color:rgb(79,67,113);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">Monoid</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">  (</span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">a</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> -&gt; </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">m</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">a</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">) </span><span style="background-color:transparent;color:rgb(57,116,96);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">where</span></b></div>


<div dir="ltr" style="text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">    </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">mappend</span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"> = (&gt;=&gt;)</span></b></div>


<div dir="ltr" style="text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">    </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">mempty  </span><span style="background-color:transparent;font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">= </span><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap">return</span></b></div>


<div dir="ltr" style="text-align:justify;font-size:medium;margin-bottom:0pt;font-family:&#39;Times New Roman&#39;;margin-top:0pt"><b><span style="background-color:transparent;color:rgb(51,51,51);font-family:&#39;Courier New&#39;;font-size:13px;font-style:italic;vertical-align:baseline;white-space:pre-wrap"><br>


</span></b></div><div><br></div><div>According with the above said,   &#39;a -&gt; m a&#39; must be understood as the set of monadic endomorphisms in a:   </div><div><br></div><div>a -&gt; a +{null elements of the monad m}</div>


<div><br></div><div>Which is, in essence, a -&gt; a</div><div><div class="h5"><br><div class="gmail_quote">2012/10/16 Simon Thompson <span dir="ltr">&lt;<a href="mailto:s.j.thompson@kent.ac.uk" target="_blank">s.j.thompson@kent.ac.uk</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Not sure I really have anything substantial to contribute, but it&#39;s certainly true that if you see<br>
<br>
  a -&gt; m b<br>
<br>
as a generalisation of the usual function type, a -&gt; b, then return generalises the identity and<br>
kleisli generalises function composition. This makes the types pretty memorable (and often the<br>
definitions too).<br>
<br>
Simon<br>
<div><br>
<br>
On 16 Oct 2012, at 20:14, David Thomas &lt;<a href="mailto:davidleothomas@gmail.com" target="_blank">davidleothomas@gmail.com</a>&gt; wrote:<br>
<br>
&gt;&gt; class Monad m where<br>
&gt;&gt;  return :: a -&gt; m a<br>
&gt;&gt;  kleisli :: (a -&gt; m b) -&gt; (b -&gt; m c) -&gt; (a -&gt; m c)<br>
<br>
</div><span><font color="#888888">Simon Thompson | Professor of Logic and Computation<br>
School of Computing | University of Kent | Canterbury, CT2 7NF, UK<br>
<a href="mailto:s.j.thompson@kent.ac.uk" target="_blank">s.j.thompson@kent.ac.uk</a> | M <a href="tel:%2B44%207986%20085754" value="+447986085754" target="_blank">+44 7986 085754</a> | W <a href="http://www.cs.kent.ac.uk/~sjt" target="_blank">www.cs.kent.ac.uk/~sjt</a><br>



</font></span><div><div><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br>Alberto.<br>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Alberto.<br>
</div></div>