[Haskell-cafe] Is it possible to represent such polymorphism?

Brandon Allbery allbery.b at gmail.com
Sun Oct 2 21:36:50 CEST 2011

On Sun, Oct 2, 2011 at 15:17, <sdiyazg at sjtu.edu.cn> wrote:

> But it'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?

Not for your meaning of "clean".

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's not *supposed* to be convenient, because the whole point is
you'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.

This doesn'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're trying to do whenever you find yourself considering them.

Nor does it mean that C++ is in some sense "wrong"; it means the languages
are fundamentally different, and the appropriate design of a program is
therefore also usually different between the two.

brandon s allbery                                      allbery.b at gmail.com
wandering unix systems administrator (available)     (412) 475-9364 vm/sms
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20111002/61eeec8b/attachment.htm>

More information about the Haskell-Cafe mailing list