data Point = Point {xcoord :: Int, ycoord :: Int}
instance Num Point
instance Move Point
instance Ix Point
instance Eq Point
instance Ord Point
instance Read Point
instance Show Point
data Line = Line Point Point
instance Move Line
instance Eq Line
instance Ord Line
instance Read Line
instance Show Line
data Rect = Rect {rectpos :: Point, rectsize :: Size}
instance Move Rect
instance Eq Rect
instance Ord Rect
instance Read Rect
instance Show Rect
type Size = Point
pP :: Int -> Int -> Point
lL :: Int -> Int -> Int -> Int -> Line
rR :: Int -> Int -> Int -> Int -> Rect
origin :: Point
diag :: Int -> Point
xcoord :: Point -> Int
ycoord :: Point -> Int
rectpos :: Rect -> Point
rectsize :: Rect -> Size
origin = Point 0 0 pP x y = Point x y lL x1 y1 x2 y2 = Line (Point x1 y1) (Point x2 y2) rR x y w h = Rect (Point x y) (Point w h)xcoord (Point x _) = x ycoord (Point _ y) = y rectpos (Rect pos _) = pos rectsize (Rect _ size) = size