[Haskell-cafe] Base classes can be _ELIMINATED_ with interfaces
shelby at coolpage.com
Sun Nov 1 21:39:08 EST 2009
I was correct before, except I conflated the word "extended" with
"eliminated" in my mind:
The most robust solution to Tim Sweeney's problem is to rethink what a
"class" should be:
In Haskel, subtyping is done with Module. A "type class" is a polymorphic
(relative to data type) interface, and the polymorphism is strictly
parameterized for the client/consumer of the interface, i.e. the data type
is known to the function that inputs the interface AT COMPILE TIME:
If all the functions/methods of package Engine input exclusively
interfaces (i.e. Engine.IActor), then client package GearsOfWar can create
a new subtype GearsOfWar.Actor which also implements the interface
Engine.IActor (and perhaps even more interfaces).
A problem with virtual (runtime pointer) inheritance is that it hides the
subclass from the compiler. Polymorphic interfaces are missing from C++
and one can sort of hack an emulation with abstract classes, private
delegates, and templates:
In Haskell, parameterized polymorphic interfaces can be inherited, and
this is knowable to the client function at compile time.
Fundamental theorems tell us that any membership rule for a set can not be
an absolute point, thus we should strive for typing and classing
architecture which is the most granular (these are my summaries):
* Russell's Paradox: there is no rule for a set that does not cause it to
contain itself, thus all sets are infinitely recursive.
* Liskov Substition Principle: it is an undecidable problem that subsets
* Linsky Referencing: it is undecidable what something is when it is
described or perceived.
* Coase Theorem: there is no external reference point, any such barrier
* Godel's Theorem: any formal theory, in which all arithmetic truths can
be proved, is inconsistent.
* 1856 Thermo Law: entire universe (a closed system, i.e. everything)
trends to maximum disorder.
More information about the Haskell-Cafe