findFarthestTwoPoints (currntPoint : pointList) finalList dist
    |  newDist >= dist = findFarthestTwoPoints pointList [currntPoint, farthestPoint] newDist
    | otherwise       = findFarthestTwoPoints pointList finalList dist
    where       
        farthestPoint = findFarthestPoint pointList currntPoint currntPoint 0       
        newDist = pointToPointDist farthestPoint currntPoint        
findFarthestTwoPoints (currntPoint : pointList) finalList dist
    |  newDist >= dist = findFarthestTwoPoints pointList [currntPoint, farthestPoint] newDist
    | otherwise       = findFarthestTwoPoints pointList finalList dist
    where       
        farthestPoint = findFarthestPoint pointList currntPoint currntPoint 0       
        newDist = pointToPointDist farthestPoint currntPoint        
findFarthestTwoPoints (currntPoint : pointList) finalList dist
    |  newDist >= dist = findFarthestTwoPoints pointList [currntPoint, farthestPoint] newDist
    | otherwise       = findFarthestTwoPoints pointList finalList dist
    where       
        farthestPoint = findFarthestPoint pointList currntPoint currntPoint 0       
        newDist = pointToPointDist farthestPoint currntPoint        