[Haskell-cafe] C++ class = neutered (haskell class + haskell existential)

Thomas Conway drtomc at gmail.com
Thu Aug 17 23:57:13 EDT 2006


On 8/18/06, John Meacham <john at repetae.net> wrote:
    [lots of good argument before and after deleted]

> 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.

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. For example

class Monad s => Store s where
    type Key
    insert :: Binary -> s Key
    retrStore :: Key -> s Binary
    ...

so that part of the instance is a choice of the key type.

For those who are interested, I'm sure the relevant papers are readily
available on citeseer/Google. :-)

Tom


More information about the Haskell-Cafe mailing list