module ParserCommon where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Expr import UtilLanguage import Target type PImport = (String, Target) type PImports = [PImport] qualifiedIdentifier = do xs <- identifier `sepBy1` symbol "." return $ foldr1 (\ w s -> w ++ '.' : s) xs parsePImport = do reserved "pimport" arity <- decimal is <- qualifiedIdentifier `sepBy1` symbol "," return $ map (\ n -> (n, mkPureN (fromIntegral arity) n)) is parsePImports = do iss <- many (do { i <- parsePImport; symbol ";"; return i }) return $ concat iss