<div dir="ltr">On Sun, Oct 2, 2011 at 15:17,  <span dir="ltr">&lt;<a href="mailto:sdiyazg@sjtu.edu.cn">sdiyazg@sjtu.edu.cn</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
But it&#39;s so verbose (even more so than similar C++ template code I guess), introduces an additional name (the typeclass) into the current scope, and requires 2 extensions: TypeFamilies and FlexibleInstances.Is there a cleaner way to do this?</blockquote>
<div><br></div><div>Not for your meaning of &quot;clean&quot;.</div><div><br></div><div>C++ is an object-oriented programming language; given a method call, it tries really hard to shoehorn the arguments to the call into some declared method somewhere along the inheritance chain.  Haskell is a functional programming language; it is strongly typed, and typeclasses are a mechanism to allow that typing to be weakened in a strictly controlled fashion.  In some sense, it&#39;s not *supposed* to be convenient, because the whole point is you&#39;re not supposed to throw arbitrarily-typed expressions at arbitrary functions.  Instead, a properly designed program is characterized by its types; if the types are well designed for the problem being solved, they very nearly write the program by themselves.</div>
</div><br clear="all"><div>This doesn&#39;t mean that use of typeclasses / ad-hoc polymorphism is automatically a sign of a poor design, but it *does* mean you should think about what you&#39;re trying to do whenever you find yourself considering them.</div>
<div><br></div><div>Nor does it mean that C++ is in some sense &quot;wrong&quot;; it means the languages are fundamentally different, and the appropriate design of a program is therefore also usually different between the two.</div>
<div><br></div>-- <br>brandon s allbery                                      <a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a><br>wandering unix systems administrator (available)     (412) 475-9364 vm/sms<br>
<br>
</div>