@@ -70,9 +70,12 @@ loadModule f
7070loadSource :: FilePath -> Idris ()
7171loadSource f = do iLOG ("Reading " ++ f)
7272 file <- lift $ readFile f
73− (modules, rest, pos) <- parseImports f file
73+ (mname, modules, rest, pos) <- parseImports f file
7474 mapM_ loadModule modules
75− ds <- parseProg defaultSyntax f rest pos
75+ ds' <- parseProg (defaultSyntax {syn_namespace = mname }) f rest pos
76+ let ds = case mname of
77+ [] -> ds'
78+ (x:_) -> [PNamespace x ds']
7679 logLvl 3 (dumpDecls ds)
7780 i <- getIState
7881 logLvl 10 (show (toAlist (idris_implicits i)))
@@ -87,13 +90,14 @@ parseTac i = runParser (do t <- pTactic defaultSyntax
8790 eof
8891 return t) i "(proof)"
8992
90−parseImports :: FilePath -> String -> Idris ([String], String, SourcePos)
93+parseImports :: FilePath -> String -> Idris ([String], [String], String, SourcePos)
9194parseImports fname input
9295 = do i <- get
93− case (runParser (do ps <- many pImport
96+ case (runParser (do mname <- pHeader
97+ ps <- many pImport
9498 rest <- getInput
9599 pos <- getPosition
96− return ((ps, rest, pos), i)) i fname input) of
100+ return ((mname, ps, rest, pos), i)) i fname input) of
97101 Left err -> fail (ishow err)
98102 Right (x, i) -> do put i
99103 return x
@@ -101,6 +105,11 @@ parseImports fname input
101105 fname ++ ":" ++ show ln ++ ":parse error"
102106-- show (map messageString (errorMessages err))
103107
108+pHeader :: IParser [String]
109+pHeader = try (do reserved "module"; i <- identifier; lchar ';'
110+ return [i])
111+ <|> return []
112+
104113
105114pfc :: IParser FC
106115pfc = do s <- getPosition