module PkgCheckParser (parseCheck, BrokenPackage (..)) where
import Text.Parsec
import Text.Parsec.String
import Control.Applicative hiding ((<|>), many)
data BrokenPackage = P { packageID :: String
, brokenDeps :: [String]
} deriving (Show, Eq, Ord)
parseCheck :: String -> Either ParseError [BrokenPackage]
parseCheck = parse (many1 check) ""
check :: Parser BrokenPackage
check = string "There are problems in package "
>> P <$> packName <* string ":\n" <*> many1 errDep
ident :: Parser String
ident = many (alphaNum <|> oneOf "-.")
packID, packName :: Parser String
packID = ident
packName = ident
errDep :: Parser String
errDep = string " dependency \"" *> packID <* string "\" doesn't exist\n"