Hello Andrew, Thursday, June 23, 2005, 5:38:03 AM, you wrote: AW> To handle the problem of drawing all shapes, in c++, I would have a list AW> of shape pointers: AW> struct shape{ virtual void draw(...);}; AW> struct circle : public shape {...}; AW> struct square : public shape {...}; AW> std::list<shape *> shapes; AW> for(std::list<shape *>::iterator it = shapes.begin();it != AW> shapes.end();++it) { (*it)->>draw(...); } AW> This general pattern of dynamic binding I use over and over again. Could AW> you give me some example code of this type of thing handled in Haskell's AW> way? Assuming that the number of classes deriving from shape might get AW> quite large. just create list of draw functions itself: [drawCircle (10,10) 5, drawSquare (20,20) 10] you are not expected that this problem can be solved with one line of code? :) for more complex tasks - declare interface as a structure: data ShapeInterface = Shape { draw :: IO (), moveTo :: Point -> IO (), calcArea :: Float } and return this structures from "constructor" functions: circle x y r = Shape { draw = drawCircle center r, moveTo newCenter = ...., calcArea = pi*r*r } where center = Point x y square x y size = Shape { draw = ...., moveTo newCenter = ...., calcArea = size*szie } figures = [circle 1 2 3, square 4 5 6, circle 7 8 9] of course, you cannot use inherited field names when using this technique :) -- Best regards, Bulat mailto:bulatz@HotPOP.com