
Hello Gabriel, Sunday, August 20, 2006, 8:26:30 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.
The dictionary can be attached to the operations (not just to the values) by using objects local to functions (which sort of matierialize the dictionary).
This means that type classes can be _emulated_ in C++. but the bare semantics is just as we said - in Haskell dictionaries are passed around the functions (unless existential used) and in C++ they are attached to objects i agree that emulation you provided is closer to type classes at least in that it implements _dynamic_ dispatching vs compile-time dispatching of templates. but typical C++ programming involves using classes and templates, not the unusual technique you have introduced. please note that one can also use some other technique (say, function pointers or switch statements) to emulate type classes behavior and this don't means that switch statements in C is a kind of type classes :) my comparison was targeted to teaching Haskell newbies (especially former OOP programmers) how to use type classes, give them a _intuition_ of this language feature and directions about its usage. C++ templates with their type inference and dispatch based on the type of entire operation is a best approximation in OOP world i know but (of course) i will add your letter as one more description of that type classes are, at this time - in terms of emulation them in C++ (in addition to emulation them in Haskell, written by Wadler and Blott) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com