data Cartesian2D = Cartesian2D { xCoord :: Double, yCoord :: Double } deriving (Eq, Show) lowestCoord :: [Cartesian2D] -> Cartesian2D lowestCoord (x:xs) = lowestCoordAux xs x lowestCoordAux :: [Cartesian2D] -> Cartesian2D -> Cartesian2D lowestCoordAux (h:xs) minValue = lowestCoordAux xs newMin where hY = (yCoord h) minY = (yCoord minValue) hX = (xCoord h) minX = (xCoord minValue) newMin = case hY `compare` minY of LT -> h GT -> minValue EQ -> case hX `compare` minX of LT -> h GT -> minValue EQ -> h lowestCoordAux [] minValue = minValue