toPoints :: String -> [Point]
toPoints = map fst . filter (isAsteroid . snd) . inputWithCoordinates . lines
inputWithCoordinates :: [[a]] -> [(Point, a)]
inputWithCoordinates = map shiftTuple . concat . zipWith withElement [0..] . map (zip [0..])
withElement :: a -> [b] -> [(a, b)]
withElement elem = zip (repeat elem)
shiftTuple :: (a,(b,c)) -> ((a,b),c)
shiftTuple (x,(y,z)) = ((x,y),z)
isAsteroid :: Char -> Bool
isAsteroid '#' = True
isAsteroid _ = False