My pocket explanation:<div><br></div><div>While e a function gives one only value of the codomain for each element of the domain set (and thus it can be evaluated a single time), a category is a generalization that accept many graphs that goes from each element of the domain to the codomain. For that matter getChar can be understood mathematically only using cathegory theory. To discover where the chain of graphs goes each time, it is necessary to execute the chain of sentences. <div>

<br></div><div>Imperative languages works &quot;categorically&quot; every time, so they don´t need an special syntax for doing so. Haskell permits to discriminate functional code from &quot;normal&quot; &quot;categorical/imperative&quot; code, so the programmer and the compiler can make use of the mathematical properties of functions. For example, graph reduction thank to the uniqueness of  the paths.</div>

<div><br></div><div>Besides that, everything, functional or monadic is equally beatiful and polimorphic. i don´t think that monadic code is less fine. It is unavoidable and no less mathematical.</div><div><br><div class="gmail_quote">

2012/6/25 Anton Kholomiov <span dir="ltr">&lt;<a href="mailto:anton.kholomiov@gmail.com" target="_blank">anton.kholomiov@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im"><div style="margin-left:40px">The class you&#39;re looking for is Applicative. The (&lt;*&gt;) operator 
handles application of &quot;effectful&quot; things to &quot;effectful&quot; things, whereas
 (&lt;$&gt;) handles the application of non-&quot;effectful&quot; things to 
&quot;effectful&quot; things. This situation is interesting because it highlights 
the fact that there is a distinction between the meaning of whitespace 
between function and argument vs the meaning of whitespace between 
argument and argument.<br></div>
<br>
<br></div>`Applicative` is not enough for monads.<br>`Applicative` is like functor only for functions <br>with many arguments. It&#39;s good for patterns:<br><br>(a -&gt; b -&gt; c -&gt; d) -&gt; (m a -&gt; m b -&gt; m c -&gt; m d)<br>


 <br>Monads are good for patterns<br><br>(a -&gt; b -&gt; c -&gt; m d) -&gt; (m a -&gt; m b -&gt; m c -&gt; m d)<br><br>So I can not express it with `Applicative`. My<br>analogy really breaks down on functions with <br>several arguments, since as you have pointed out there are<br>


two white spaces. But I like the idea of using<br>one sign for normal and monadic  and maybe applicative <br>applications.<span class="HOEnZb"><font color="#888888"><br><br>Anton<br><br>
</font></span><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
<br></blockquote></div><br></div></div>