laserAsteroidCollision :: ([GameObject],[GameObject])->([GameObject],[GameObject])
laserAsteroidCollision (lasers,asteroids) = let
                                                lasersId = zip [1..] lasers
                                                asteroidsId = zip [1..] asteroids
                                                cartesianList = [(x,y) | x<-lasersId,y<-asteroidsId]
                                                collisions = filter (\(x,y) ->  collisionExists (snd x) (snd y)) cartesianList
                                                (lasersRemoveId,_) = unzip $ map (fst) collisions
                                                (asteroidsRemoveId, asteroidsRemove) = unzip $ map (snd) collisions
                                                replacedBigAsteroids =  foldr (\asteroid asteroids -> 
                                                                                (separateAsteroid asteroid) ++ asteroids 
                                                                              ) [] 
                                                                              (filter (\x -> fst(getGameObjectSize x)  == 200.0) asteroidsRemove)
                                                                         
                                          in
                                                ( map snd (filter (\(x,y) -> notElem x lasersRemoveId) lasersId )
                                                , map snd (filter (\(x,y) -> notElem x asteroidsRemoveId) asteroidsId ) ++ replacedBigAsteroids)
laserAsteroidCollision :: ([GameObject],[GameObject])->([GameObject],[GameObject])
laserAsteroidCollision (lasers,asteroids) = let
                                                lasersId = zip [1..] lasers
                                                asteroidsId = zip [1..] asteroids
                                                cartesianList = [(x,y) | x<-lasersId,y<-asteroidsId]
                                                collisions = filter (\(x,y) ->  collisionExists (snd x) (snd y)) cartesianList
                                                (lasersRemoveId,_) = unzip $ map (fst) collisions
                                                (asteroidsRemoveId, asteroidsRemove) = unzip $ map (snd) collisions
                                                replacedBigAsteroids =  foldr (\asteroid asteroids -> 
                                                                                (separateAsteroid asteroid) ++ asteroids 
                                                                              ) [] 
                                                                              (filter (\x -> fst(getGameObjectSize x)  == 200.0) asteroidsRemove)
                                                                         
                                          in
                                                ( map snd (filter (\(x,y) -> notElem x lasersRemoveId) lasersId )
                                                , map snd (filter (\(x,y) -> notElem x asteroidsRemoveId) asteroidsId ) ++ replacedBigAsteroids)
laserAsteroidCollision (lasers,asteroids) = let
                                                lasersId = zip [1..] lasers
                                                asteroidsId = zip [1..] asteroids
                                                cartesianList = [(x,y) | x<-lasersId,y<-asteroidsId]
                                                collisions = filter (\(x,y) ->  collisionExists (snd x) (snd y)) cartesianList
                                                (lasersRemoveId,_) = unzip $ map (fst) collisions
                                                (asteroidsRemoveId, asteroidsRemove) = unzip $ map (snd) collisions
                                                replacedBigAsteroids =  foldr (\asteroid asteroids -> 
                                                                                (separateAsteroid asteroid) ++ asteroids 
                                                                              ) [] 
                                                                              (filter (\x -> fst(getGameObjectSize x)  == 200.0) asteroidsRemove)
                                                                         
                                          in
                                                ( map snd (filter (\(x,y) -> notElem x lasersRemoveId) lasersId )
                                                , map snd (filter (\(x,y) -> notElem x asteroidsRemoveId) asteroidsId ) ++ replacedBigAsteroids)