Simon Courtenage wrote:
I am porting a C++ program to Haskell. My current task is to take a
class hierarchy and produce something equivalent in Haskell, but I don't
seem to be able to get a grip on how type classes and instances
contribute to the solution.
They probably do not contribute at all.
class A {
public:
virtual int do_x(int,int) = 0;
};
class B {
public:
int do_x(int x,int y) { ...}
};
class C {
public:
int do_x(int x,int y) { ...}
};
I guess B and C are subclasses of A?
If you do not need complicated subtyping schemes, you could consider on
of the following two options: You could emphasize the structure of the
class hierarchy, or you could emphasize the object abstraction.
The structure of the class hierarchy could be represented by an
algebraic data type
data A = B | C
with the do_x function implementing by pattern matching on an A value
do_x :: A -> Int -> Int -> Int
do_x B = ...
do_x C = ...
If your classes have fields, they could be added as fields to the data
constructors B and C.
Alternatively, the object abstraction could be represented by encoding
objects as records of first-class functions.
data A = A {
do_x :: Int -> Int -> Int
}
b = A {do_x = \x y -> ...}
c = A {do_x = \x y -> ...}
If your classes have fields, they could be added as arguments to
constructor functions b and c.
Tillmann
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe