Point, Bool)
stepDivision startPoint eps iterCount step
        | iterCount == 0                        = (startPoint, False)
        | measure startPoint nextPoint < eps    = (nextPoint, True)
        | otherwise                             = stepDivision nextPoint eps (iterCount - 1) nextStep
        where
            (nextPoint, nextStep) = getNextPointAndStep startPoint step

stepDivision :: Point -> Double -> Integer -> Double -> (Point, Bool)
stepDivision startPoint eps iterCount step
        | iterCount == 0                        = (startPoint, False)
        | measure startPoint nextPoint < eps    = (nextPoint, True)
        | otherwise                             = stepDivision nextPoint eps (iterCount - 1) nextStep
        where
            (nextPoint, nextStep) = getNextPointAndStep startPoint step
stepDivision startPoint eps iterCount step
        | iterCount == 0                        = (startPoint, False)
        | measure startPoint nextPoint < eps    = (nextPoint, True)
        | otherwise                             = stepDivision nextPoint eps (iterCount - 1) nextStep
        where
            (nextPoint, nextStep) = getNextPointAndStep startPoint step