I implemented an algorithm that gives me a list of points that should be drawn in order the get a line between two points. Please note: it works only in a coordinate system whose origin (0,0) is in the upper left corner.I'd like to get some review on my Haskell code, could it be improved in terms of the language constructs used?Could it be more readable, more straight forward?module DrawLine wheredata Point = Point Float Float deriving (Show)getRange :: Int -> Int -> [Int]getRange a b    | a <= b = [a..b]    | otherwise = [b..a]{-| - Get the slope of a line described by the two points received as arguments-}getSlope :: Point -> Point -> FloatgetSlope (Point x1 y1) (Point x2 y2) = (y2-y1)/(x2-x1){-| - Get a list of points where pixels should be filled to draw a line - (Inspired from Bresenham's line algorithm) - Takes two Point arguments representing the end points of the line, the points - will be located on a line between these two points -}getLinePoints :: Point -> Point -> [Point]getLinePoints f@(Point fx fy) l@(Point lx ly)    -- vertical line    | fx == lx = [(Point fx (fromIntegral y)) | y <- getRange (round fy) (round ly)]    | otherwise =        -- generate points by mapping on the longer side of the line        if m > 1.0 || m < -1.0 then            -- the rise if higher than the run            map (\y ->                    (Point                        ((1/m) * ((fromIntegral y) - fy) + fx)                        (fromIntegral y)                    )                )                (getRange (round fy) (round ly))        else            map (\x ->                    (Point                        (fromIntegral x)                        (m * ((fromIntegral x) - fx) + fy)                    )                )                (getRange (round fx) (round lx))        where            m = getSlope f l 
Bresenham-like line algorithm
algorithm;beginner;haskell;graphics