@@ -1,6 +1,6 @@
1{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
1{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
3−module CoreParser(parseTerm, parseFile, parseDef, pTerm) where
3+module CoreParser(parseTerm, parseFile, parseDef, pTerm, iName) where
@@ -36,14 +36,17 @@ parseTerm = parse pTerm "(input)"
36pTestFile :: Parser RProgram
36pTestFile :: Parser RProgram
37pTestFile = many1 pDef
37pTestFile = many1 pDef
40+iName = identifier >>= (\n -> return (UN [n]))
39pDef :: Parser (Name, RDef)
42pDef :: Parser (Name, RDef)
40−pDef = try (do x <- identifier; lchar ':'; ty <- pTerm
43+pDef = try (do x <- iName; lchar ':'; ty <- pTerm
42 tm <- pTerm
45 tm <- pTerm
44− return (UN [x], RFunction (RawFun ty tm)))
47+ return (x, RFunction (RawFun ty tm)))
45− <|> do x <- identifier; lchar ':'; ty <- pTerm; lchar ';'
48+ <|> do x <- iName; lchar ':'; ty <- pTerm; lchar ';'
46− return (UN [x], RConst ty)
49+ return (x, RConst ty)
48app :: Parser (Raw -> Raw -> Raw)
51app :: Parser (Raw -> Raw -> Raw)
49app = do whiteSpace ; return RApp
52app = do whiteSpace ; return RApp
@@ -60,48 +63,48 @@ pNoApp = try (chainr1 pExp arrow)
62pExp :: Parser Raw
65pExp :: Parser Raw
63−pExp = do lchar '\\'; x <- identifier; lchar ':'; ty <- pTerm
66+pExp = do lchar '\\'; x <- iName; lchar ':'; ty <- pTerm
64 symbol "=>";
67 symbol "=>";
65 sc <- pTerm
68 sc <- pTerm
66− return (RBind (UN [x]) (Lam ty) sc)
69+ return (RBind x (Lam ty) sc)
67− <|> try (do lchar '?'; x <- identifier; lchar ':'; ty <- pTerm
70+ <|> try (do lchar '?'; x <- iName; lchar ':'; ty <- pTerm
68 lchar '.';
71 lchar '.';
69 sc <- pTerm
72 sc <- pTerm
70− return (RBind (UN [x]) (Lam ty) sc))
73+ return (RBind x (Lam ty) sc))
71 <|> try (do lchar '(';
74 <|> try (do lchar '(';
72− x <- identifier; lchar ':'; ty <- pTerm
75+ x <- iName; lchar ':'; ty <- pTerm
73 lchar ')';
76 lchar ')';
74 symbol "->";
77 symbol "->";
75 sc <- pTerm
78 sc <- pTerm
76− return (RBind (UN [x]) (Pi ty) sc))
79+ return (RBind x (Pi ty) sc))
77 <|> try (do lchar '(';
80 <|> try (do lchar '(';
78 t <- pTerm
81 t <- pTerm
81 <|> try (do lchar '?';
84 <|> try (do lchar '?';
82− x <- identifier; lchar ':'; ty <- pTerm
85+ x <- iName; lchar ':'; ty <- pTerm
83 lchar '.';
86 lchar '.';
84 sc <- pTerm
87 sc <- pTerm
85− return (RBind (UN [x]) (Hole ty) sc))
88+ return (RBind x (Hole ty) sc))
86 <|> try (do symbol "??";
89 <|> try (do symbol "??";
87− x <- identifier; lchar ':'; ty <- pTerm
90+ x <- iName; lchar ':'; ty <- pTerm
88 lchar '=';
91 lchar '=';
89 val <- pTerm
92 val <- pTerm
90 sc <- pTerm
93 sc <- pTerm
91− return (RBind (UN [x]) (Guess ty val) sc))
94+ return (RBind x (Guess ty val) sc))
92 <|> try (do reserved "let";
95 <|> try (do reserved "let";
93− x <- identifier; lchar ':'; ty <- pTerm
96+ x <- iName; lchar ':'; ty <- pTerm
94 lchar '=';
97 lchar '=';
95 val <- pTerm
98 val <- pTerm
96 sc <- pTerm
99 sc <- pTerm
97− return (RBind (UN [x]) (Let ty val) sc))
100+ return (RBind x (Let ty val) sc))
98 <|> try (do lchar '_';
101 <|> try (do lchar '_';
99− x <- identifier; lchar ':'; ty <- pTerm
102+ x <- iName; lchar ':'; ty <- pTerm
100 lchar '.';
103 lchar '.';
101 sc <- pTerm
104 sc <- pTerm
102− return (RBind (UN [x]) (PVar ty) sc))
105+ return (RBind x (PVar ty) sc))
103 <|> try (do reserved "Set"; i <- natural
106 <|> try (do reserved "Set"; i <- natural
104 return (RSet (fromInteger i)))
107 return (RSet (fromInteger i)))
105− <|> try (do x <- identifier
108+ <|> try (do x <- iName
106− return (Var (UN [x])))
109+ return (Var x))