module Parsing ( splitByString, parseCoordinates ) where import Data.List (isPrefixOf) splitByString :: String -> String -> [String] splitByString _ "" = [] splitByString splitter string = let (chunk, rest) = spanNextSplit string in chunk:(splitByString splitter rest) where spanNextSplit :: String -> (String, String) spanNextSplit [] = ([], []) spanNextSplit everything@(char:rest) | splitter `isPrefixOf` rest = ([char], (drop ((length splitter) + 1) everything)) | otherwise = let (start, end) = spanNextSplit rest in (char:start, end) parseCoordinates :: String -> [(Int, Int)] parseCoordinates = map (tuplify . map read . splitByString ",") . lines where tuplify :: [a] -> (a, a) tuplify [a, b] = (a, b) tuplify _ = error "Can't parse coordinates from non-2-sized lists"