
Hello Thomas, Friday, August 18, 2006, 7:57:13 AM, you wrote:
There is a major difference though, in C++ (or java, or sather, or c#, etc..) the dictionary is always attached to the value, the actual class data type you pass around. in haskell, the dictionary is passed separately and the appropriae one is infered by the type system. C++ doesn't infer, it just assumes everything will be carying around its dictionary with it.
C++ programmers deal with this using a number of techniques, mostly involving templates.
Haskell type classes are closer to templates/generics than to classes itself
Actually, there is one technique using C++ templates that I really want to see going mainstream in the Haskell implementations. Existential types are already there, now I want to see associated types (trait types in C++). Maybe I've been doing too much C++ programming in the last few years, but a lot of the times when I end up using multiparameter type classes, what I really want is an associated type.
i also wrote a lot of such code for Streams library and can say that MPTC+FD are close enough to emulate AT, although need slightly more verbose definitions. moreover, AT are already implemented in GHC 6.5, afai seen in ghc-cvs reports
For those who are interested, I'm sure the relevant papers are readily available on citeseer/Google. :-)
http://haskell.org/haskellwiki/Research_papers/Type_systems#Associated_types -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com