on master help sign in
Hierarchical namespaces; reorganised prelude accordingly
commitc997a4804a4cffa8ff3e0a3f53f920603bae2cc2 authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateTue 29 Nov 2011, 16:37 (15 years ago) parent3b1ee4b
11 files changed+24−17
idris.cabal+1−1 lib/Makefile−1 lib/io.idr+1−1 lib/prelude.idr+6−5 lib/either.idr → lib/prelude/either.idr lib/list.idr → lib/prelude/list.idr lib/maybe.idr → lib/prelude/maybe.idr lib/nat.idr → lib/prelude/nat.idr+1−1 lib/vect.idr → lib/prelude/vect.idr+1−1 src/Idris/Parser.hs+13−6 src/Idris/REPL.hs+1−1
idris.cabal+1−1
@@ -18,7 +18,7 @@ Description: Idris is an experimental language with full dependent types.
1818Cabal-Version: >= 1.6
1919Build-type: Simple
2020
21−Data-files: *.idr
21+Data-files: *.idr prelude/*.idr
2222Data-dir: lib
2323
2424Executable idris
lib/Makefile−1
@@ -1,4 +1,3 @@
1−SRCS = prelude.idr list.idr nat.idr prelude.idr vect.idr
21
32check: .PHONY
43 for x in *.idr ; do \
lib/io.idr+1−1
@@ -1,4 +1,4 @@
1−import list;
1+import prelude.list;
22
33data IO a = prim__IO a;
44
lib/prelude.idr+6−5
@@ -1,13 +1,14 @@
11module prelude;
22
33import builtins;
4−import nat;
5−import list;
6−import maybe;
7−import either;
8−import vect;
94import io;
105
6+import prelude.nat;
7+import prelude.list;
8+import prelude.maybe;
9+import prelude.either;
10+import prelude.vect;
11+
1112-- Show and instances
1213
1314class Show a where {
lib/either.idr → lib/prelude/either.idrrenamed

The content is the same.

lib/list.idr → lib/prelude/list.idrrenamed

The content is the same.

lib/maybe.idr → lib/prelude/maybe.idrrenamed

The content is the same.

lib/nat.idr → lib/prelude/nat.idrrenamed+1−1
@@ -1,4 +1,4 @@
1−module nat;
1+module prelude.nat;
22
33import builtins;
44
lib/vect.idr → lib/prelude/vect.idrrenamed+1−1
@@ -1,6 +1,6 @@
11module vect;
22
3−import nat;
3+import prelude.nat;
44
55data Fin : Nat -> Set where
66 fO : Fin (S k)
src/Idris/Parser.hs+13−6
@@ -72,10 +72,9 @@ loadSource f = do iLOG ("Reading " ++ f)
7272 file <- lift $ readFile f
7373 (mname, modules, rest, pos) <- parseImports f file
7474 mapM_ loadModule modules
75− ds' <- parseProg (defaultSyntax {syn_namespace = mname }) f rest pos
76− let ds = case mname of
77− [] -> ds'
78− (x:_) -> [PNamespace x ds']
75+ ds' <- parseProg (defaultSyntax {syn_namespace = reverse mname })
76+ f rest pos
77+ let ds = namespaces mname ds'
7978 logLvl 3 (dumpDecls ds)
8079 i <- getIState
8180 logLvl 10 (show (toAlist (idris_implicits i)))
@@ -84,6 +83,9 @@ loadSource f = do iLOG ("Reading " ++ f)
8483 mapM_ (elabDecl toplevel) ds
8584 iLOG ("Finished " ++ f)
8685 return ()
86+ where
87+ namespaces [] ds = ds
88+ namespaces (x:xs) ds = [PNamespace x (namespaces xs ds)]
8789
8890parseExpr i = runParser (pFullExpr defaultSyntax) i "(input)"
8991parseTac i = runParser (do t <- pTactic defaultSyntax
@@ -107,8 +109,11 @@ parseImports fname input
107109
108110pHeader :: IParser [String]
109111pHeader = try (do reserved "module"; i <- identifier; lchar ';'
110− return [i])
112+ return (parseName i))
111113 <|> return []
114+ where parseName x = case span (/='.') x of
115+ (x, "") -> [x]
116+ (x, '.':y) -> x : parseName y
112117
113118
114119pfc :: IParser FC
@@ -123,7 +128,9 @@ pImport :: IParser String
123128pImport = do reserved "import"
124129 f <- identifier
125130 lchar ';'
126− return f
131+ return (map dot f)
132+ where dot '.' = '/'
133+ dot c = c
127134
128135parseProg :: SyntaxInfo -> FilePath -> String -> SourcePos -> Idris [PDecl]
129136parseProg syn fname input pos
src/Idris/REPL.hs+1−1
@@ -174,7 +174,7 @@ displayHelp = let vstr = showVersion version in
174174 "\nIdris version " ++ vstr ++ "\n" ++
175175 "--------------" ++ map (\x -> '-') vstr ++ "\n\n" ++
176176 concatMap cmdInfo help
177− where cmdInfo (cmds, args, text) = " " ++ col 16 10 (showSep " " cmds) args text
177+ where cmdInfo (cmds, args, text) = " " ++ col 16 12 (showSep " " cmds) args text
178178 col c1 c2 l m r =
179179 l ++ take (c1 - length l) (repeat ' ') ++
180180 m ++ take (c2 - length m) (repeat ' ') ++ r ++ "\n"