
On Mon, Sep 13, 2010 at 02:52:06PM +0200, Martin Tomko wrote:
Dear all, apologies for a newbie question, but I am returning to Haskell after years of hiatus and Java...
I have the following data type (representing geometries):
data Geometry = Point FID Coordinate | LineSegment FID (Coordinate,Coordinate) | Polyline FID [Coordinate] | Polygon FID [Coordinate] deriving (Show,Eq)
type Coordinate = (Float, Float)
And this is where I fail: I have no idea how to type getCoordinates, in order to match against the three different combinations -> it can result into a Coordinate, or a typle, or a List. I am sure it is possible!
It is not possible. What would you do with the coordinates once you had them? You wouldn't know what type of coordinates you would be getting and hence you would be unable to do anything with them. Why not something like this? getCoordinates :: Geometry -> [Coordinate] getCoordinates (Point _ c) = [c] getCoordinates (LineSegment _ (c1,c2)) = [c1,c2] getCoordinates (Polyline _ cs) = cs getCoordinates (Polygon _ cs) = cs -Brent