@@ -20,21 +20,21 @@ import SourceSyntax.Expression
2020
2121-------- Basic Terms --------
2222
23−varTerm :: IParser (Expr t v)
23+varTerm :: IParser ParseExpr
2424varTerm = toVar <$> var <?> "variable"
2525
26−toVar :: String -> Expr t v
26+toVar :: String -> ParseExpr
2727toVar v = case v of "True" -> Literal (Literal.Boolean True)
2828 "False" -> Literal (Literal.Boolean False)
2929 _ -> Var v
3030
31−accessor :: IParser (Expr t v)
31+accessor :: IParser ParseExpr
3232accessor = do
3333 (start, lbl, end) <- located (try (string "." >> rLabel))
3434 let loc e = Location.at start end e
3535 return (Lambda (PVar "_") (loc $ Access (loc $ Var "_") lbl))
3636
37−negative :: IParser (Expr t v)
37+negative :: IParser ParseExpr
3838negative = do
3939 (start, nTerm, end) <-
4040 located (try (char '-' >> notFollowedBy (char '.' <|> char '-')) >> term)
@@ -44,7 +44,7 @@ negative = do
4444
4545-------- Complex Terms --------
4646
47−listTerm :: IParser (Expr t v)
47+listTerm :: IParser ParseExpr
4848listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
4949 where
5050 range = do
@@ -67,7 +67,7 @@ listTerm = markdown' <|> braces (try range <|> ExplicitList <$> commaSep expr)
6767 string "}}"
6868 return (md ++ span uid (length exprs), exprs ++ [e])
6969
70−parensTerm :: IParser (LExpr t v)
70+parensTerm :: IParser LParseExpr
7171parensTerm = try (parens opFn) <|> parens (tupleFn <|> parened)
7272 where
7373 opFn = do
@@ -90,7 +90,7 @@ parensTerm = try (parens opFn) <|> parens (tupleFn <|> parened)
9090 [e] -> e
9191 _ -> Location.at start end (tuple es)
9292
93−recordTerm :: IParser (LExpr t v)
93+recordTerm :: IParser LParseExpr
9494recordTerm = brackets $ choice [ misc, addLocation record ]
9595 where field = do
9696 label <- rLabel
@@ -123,14 +123,14 @@ recordTerm = brackets $ choice [ misc, addLocation record ]
123123 Nothing -> try (insert record) <|> try (modify record)
124124
125125
126−term :: IParser (LExpr t v)
126+term :: IParser LParseExpr
127127term = addLocation (choice [ Literal <$> literal, listTerm, accessor, negative ])
128128 <|> accessible (addLocation varTerm <|> parensTerm <|> recordTerm)
129129 <?> "basic term (4, x, 'c', etc.)"
130130
131131-------- Applications --------
132132
133−appExpr :: IParser (LExpr t v)
133+appExpr :: IParser LParseExpr
134134appExpr = do
135135 t <- term
136136 ts <- constrainedSpacePrefix term $ \str ->
@@ -141,12 +141,12 @@ appExpr = do
141141
142142-------- Normal Expressions --------
143143
144−binaryExpr :: IParser (LExpr t v)
144+binaryExpr :: IParser LParseExpr
145145binaryExpr = binops appExpr lastExpr anyOp
146146 where lastExpr = addLocation (choice [ ifExpr, letExpr, caseExpr ])
147147 <|> lambdaExpr
148148
149−ifExpr :: IParser (Expr t v)
149+ifExpr :: IParser ParseExpr
150150ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
151151 where
152152 normal = do
@@ -162,7 +162,7 @@ ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
162162 b <- expr ; padded arrow
163163 (,) b <$> expr
164164
165−lambdaExpr :: IParser (LExpr t v)
165+lambdaExpr :: IParser LParseExpr
166166lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
167167 whitespace
168168 args <- spaceSep1 Pattern.term
@@ -170,17 +170,17 @@ lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
170170 body <- expr
171171 return (makeFunction args body)
172172
173−defSet :: IParser [Def t v]
173+defSet :: IParser [ParseDef]
174174defSet = block (do d <- def ; whitespace ; return d)
175175
176−letExpr :: IParser (Expr t v)
176+letExpr :: IParser ParseExpr
177177letExpr = do
178178 reserved "let" ; whitespace
179179 defs <- defSet
180180 padded (reserved "in")
181181 Let defs <$> expr
182182
183−caseExpr :: IParser (Expr t v)
183+caseExpr :: IParser ParseExpr
184184caseExpr = do
185185 reserved "case"; e <- padded expr; reserved "of"; whitespace
186186 Case e <$> (with <|> without)
@@ -190,7 +190,7 @@ caseExpr = do
190190 with = brackets (semiSep1 (case_ <?> "cases { x -> ... }"))
191191 without = block (do c <- case_ ; whitespace ; return c)
192192
193−expr :: IParser (LExpr t v)
193+expr :: IParser LParseExpr
194194expr = addLocation (choice [ ifExpr, letExpr, caseExpr ])
195195 <|> lambdaExpr
196196 <|> binaryExpr
@@ -216,18 +216,18 @@ defStart =
216216 return $ if o == '`' then [ PVar $ takeWhile (/='`') p, p1, p2 ]
217217 else [ PVar (o:p), p1, p2 ]
218218
219−makeFunction :: [Pattern] -> LExpr t v -> LExpr t v
219+makeFunction :: [Pattern] -> LParseExpr -> LParseExpr
220220makeFunction args body@(L s _) =
221221 foldr (\arg body' -> L s $ Lambda arg body') body args
222222
223−definition :: IParser (Def t v)
223+definition :: IParser ParseDef
224224definition = withPos $ do
225225 (name:args) <- defStart
226226 padded equals
227227 body <- expr
228228 return . Def name $ makeFunction args body
229229
230−typeAnnotation :: IParser (Def t v)
230+typeAnnotation :: IParser ParseDef
231231typeAnnotation = TypeAnnotation <$> try start <*> Type.expr
232232 where
233233 start = do
@@ -235,5 +235,5 @@ typeAnnotation = TypeAnnotation <$> try start <*> Type.expr
235235 padded hasType
236236 return v
237237
238−def :: IParser (Def t v)
238+def :: IParser ParseDef
239239def = typeAnnotation <|> definition