module CSVParser (
    parseCSV
    )where

import Text.ParserCombinators.Parsec

csvFile :: GenParser Char st [[String]]
csvFile = do
    result <- many line
    eof
    return result

line :: GenParser Char st [String]
line = do
    result <- cells
    _ <- eol
    return result

cells :: GenParser Char st [String]
cells = do
    first <- cellContent
    next <- remainingCells
    return (first : next)

remainingCells :: GenParser Char st [String]
remainingCells =
    (char ',' >> cells)            -- Found comma?  More cells coming
    <|> return []                -- No comma?  Return [], no more cells

cellContent :: GenParser Char st String
cellContent = many (noneOf ",\n")

eol :: GenParser Char st Char
eol = char '\n'

parseCSV :: String -> Either ParseError [[String]]
parseCSV = parse csvFile "(unknown)"
