
Hi, I learning haskell and I am trying to understand how model certain things in it. As I have been doing a lot of C++ programming so far. Let's imagine we want to write a game. In the game there are spaceships and rocks (image something like astroids :) ). Now both spaceships and rocks have a position and can move. Spaceships can shoot, while rocks can explode. In C++, I would do (simplified): class ScreenObject { float x,y; void move(dx,dy){x+=dx;y+=dy;} }; class Spaceship : public ScreenObject { void shoot(){...} }; class Rocket : public ScreenObject { void explode(){...} }; But what would I do in haskell? Ok, I can define a typeclass "ScreenObjectType" that has a move function (taking an object, retuning an moved object). But I do not want to implement "move" for both Spaceship and Rocket. Can I somehow give a default implementation for move that works on any datatype having an "x" and "y" element? Or what would I do? Can I somehow define a "base datatype" holding a x and y member form which Spaceship and Rocket derive? I feel like I am thinking to much OOP here. But the point is, I guess, that I want to avoid code duplication! So I guess, it comes down to the questions: How would you model the scenario described above in haskell? Thanks! Nathan