packages feed

ghc-pkg-autofix-0.1.4: PkgCheckParser.hs

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"