Thanks Stephen. Your explanation is comprehensive.<br><br>Well, how did you know Monad is with kind :: * -&gt; * ?<br>What about the Arrow (From Control.Arrow) class?<br><br>Did you have any references or something regarding such concepts?<br>

<br clear="all">-Haisheng<br>
<br><br><div class="gmail_quote">On Wed, Jun 29, 2011 at 10:21 PM, Stephen Tetley <span dir="ltr">&lt;<a href="mailto:stephen.tetley@gmail.com">stephen.tetley@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

The class Monad is more specifically a &quot;constructor class&quot; rather than<br>
a type class.<br>
<br>
Constructor classes have particular arities (numbers of parameters -<br>
&quot;holes&quot;) called &quot;kinds&quot;.<br>
<br>
Monad is a constructor class with kind :: * -&gt; *<br>
<br>
(Write w) - has kind :: * -&gt; *<br>
<br>
Write - has kind :: * -&gt; * -&gt; *<br>
<br>
(Write w a) - has kind :: *<br>
<br>
Thus only the first is compatible with the Monad class.<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br>