@@ -9,48 +9,49 @@ import ParserLib
99import ParseTypes (datatype)
1010import ParsePatterns
1111import Tokens
12+import Control.Monad (liftM)
1213
1314-------- Basic Terms --------
1415
15−num_term = do { whitespace; t <- item
16+numTerm = do { whitespace; t <- item
1617 ; case t of { NUMBER n -> return $ Number n; _ -> zero } }
17−str_term = do { whitespace; t <- item
18+strTerm = do { whitespace; t <- item
1819 ; case t of { STRING cs -> return . list $ map Chr cs
1920 ; _ -> zero } }
2021
21−var_term = do var >>= return . Var
22−chr_term = do chr >>= return . Chr
22+varTerm = Var `liftM` var
23+chrTerm = Chr `liftM` chr
2324
24−true_term = do { t TRUE; return $ Boolean True }
25−false_term = do { t FALSE; return $ Boolean False }
25+trueTerm = do { t TRUE; return $ Boolean True }
26+falseTerm = do { t FALSE; return $ Boolean False }
2627
2728
2829-------- Complex Terms --------
2930
30−list_term = (do { t LBRACKET; start <- expr; t DOT2; end <- expr; t RBRACKET
31+listTerm = (do { t LBRACKET; start <- expr; t DOT2; end <- expr; t RBRACKET
3132 ; return $ Range start end }) +|+
3233 (do { t LBRACKET; es <- sepBy (t COMMA) expr; t RBRACKET
3334 ; return $ list es })
3435
35−parens_term = (do { t LPAREN; op <- anyOp; t RPAREN
36+parensTerm = (do { t LPAREN; op <- anyOp; t RPAREN
3637 ; return . Lambda "x" . Lambda "y" $
3738 Binop op (Var "x") (Var "y") }) +|+
3839 (do { t LPAREN; es <- sepBy (t COMMA) expr; t RPAREN
3940 ; return $ case es of { [e] -> e; _ -> tuple es } })
4041
41−term = select [ num_term
42− , str_term
43− , accessible var_term
44− , chr_term
45− , true_term
46− , false_term
47− , list_term
48− , accessible parens_term
42+term = select [ numTerm
43+ , strTerm
44+ , accessible varTerm
45+ , chrTerm
46+ , trueTerm
47+ , falseTerm
48+ , listTerm
49+ , accessible parensTerm
4950 ]
5051
5152-------- Applications --------
5253
53−app_expr = do
54+appExpr = do
5455 tlist <- plus term
5556 return $ case tlist of
5657 t:[] -> t
@@ -59,20 +60,20 @@ app_expr = do
5960
6061-------- Expressions with infix operators --------
6162
62−binary_expr = binops app_expr anyOp
63+binaryExpr = binops appExpr anyOp
6364
6465
6566-------- Normal Expressions --------
6667
67−if_expr = do { t IF; e1 <- expr; t THEN; e2 <- expr; t ELSE; e3 <- expr
68+ifExpr = do { t IF; e1 <- expr; t THEN; e2 <- expr; t ELSE; e3 <- expr
6869 ; return $ If e1 e2 e3 }
6970
70−lambda_expr = do { t LAMBDA; vs <- plus var; t ARROW; e <- expr
71− ; return $ foldr (\x e -> Lambda x e) e vs }
71+lambdaExpr = do { t LAMBDA; vs <- plus var; t ARROW; e <- expr
72+ ; return $ foldr Lambda e vs }
7273
73−assign_expr = whitespace >> assign_expr_nospace
74−assign_expr_nospace = do
75− p:ps <- plus pattern_term; assign; e <- expr
74+assignExpr = whitespace >> assignExprNospace
75+assignExprNospace = do
76+ p:ps <- plus patternTerm; assign; e <- expr
7677 case p:ps of
7778 PVar x : _ -> return (x, foldr func e ps)
7879 where func PAnything e' = Lambda "_" e'
@@ -81,30 +82,30 @@ assign_expr_nospace = do
8182-- _ : [] -> return $ \hole -> Case e [(p,hole)]
8283 _ -> zero
8384
84−let_expr = do
85+letExpr = do
8586 t LET; brace <- optional $ t LBRACE
8687 case brace of
87− Nothing -> do f <- assign_expr; t IN; e <- expr; return (Let [f] e)
88− Just LBRACE -> do fs <- sepBy1 (t SEMI) assign_expr; t RBRACE; t IN;
88+ Nothing -> do f <- assignExpr; t IN; e <- expr; return (Let [f] e)
89+ Just LBRACE -> do fs <- sepBy1 (t SEMI) assignExpr; t RBRACE; t IN;
8990 e <- expr; return (Let fs e)
9091
91−case_expr = do
92+caseExpr = do
9293 t CASE; e <- expr; t OF; t LBRACE
9394 cases <- sepBy1 (t SEMI)
94− (do { p <- pattern_expr; t ARROW; e <- expr; return (p,e) })
95+ (do { p <- patternExpr; t ARROW; e <- expr; return (p,e) })
9596 t RBRACE
9697 return $ Case e cases
9798
9899-------- All Expressions --------
99100
100−expr = select [ let_expr
101− , binary_expr
102− , if_expr
103− , case_expr
104− , lambda_expr
101+expr = select [ letExpr
102+ , binaryExpr
103+ , ifExpr
104+ , caseExpr
105+ , lambdaExpr
105106 ]
106107
107−def = assign_expr_nospace >>= return . (:[])
108+def = (:[]) `liftM` assignExprNospace
108109
109110defs = do
110111 ds <- plus (whitespace >> plus (sat (==NEWLINE)) >> def +|+ datatype)