[Haskell-cafe] Re: How to fulfill the "code-reuse" destiny of OOP?

oleg at okmij.org oleg at okmij.org
Fri Oct 30 03:49:01 EDT 2009


Magicloud Magiclouds wrote
> In OOP, when I inherit a class, I also got the members of it. 
> But in haskell, how to  inherit a "data"?

Although any OOP system has by definition, objects, not all of them
have classes. The best example of a classless (also called 1-level, or
prototype-based) OO system is Self, which is still alive.

An object is essentially a record of data members. An extended object
(an object of an extended class, for a class-based OOP) is an extended
record. They could be quite convenient: we can add a new field to an
existing record without re-writing the complete declaration and
re-using lots of the functions that dealt with the old records. The
old code would just work on extended records, ignoring the added
field. (I am simplifying a bit.)

Lots has been written about extensible records in Haskell; some
techniques (such as parameterizing a record type by a tail) have been
rediscovered several times. Still a good survey of many various ways to
implement extensible records in Haskell is Section 3 of
	http://homepages.cwi.nl/~ralf/OOHaskell/paper.pdf
It is long, as everything else in that paper.



More information about the Haskell-Cafe mailing list