@@ -90,45 +90,37 @@ listTerm =
91parensTerm :: IParser Source.Expr
91parensTerm :: IParser Source.Expr
92parensTerm =
92parensTerm =
94− [ try opFn
94+ mkFunc args realBody start end =
95− , parens (tupleFn <|> parened)
95+ foldr
98− lambda start end x body =
99− A.at start end (E.Lambda (A.at start end (P.Var x)) body)
96+ (\arg body -> A.at start end (E.Lambda (A.at start end (P.Var arg)) body))
102− A.at start end (E.rawVar x)
97+ (A.at start end (realBody (A.at start end . E.rawVar)))
104− opFn =
100+ mkBinop op =
105− do (start, op, end) <- located (parens symOp)
107− lambda start end "x" $
108− lambda start end "y" $
110− E.Binop (Var.Raw op) (var start end "x") (var start end "y")
101+ mkFunc ["x","y"] (\var -> E.Binop (Var.Raw op) (var "x") (var "y"))
112 tupleFn =
103 tupleFn =
113− do (start, commas, end) <-
104+ do commas <- many1 comma
114− located (comma >> many (whitespace >> comma))
116− let vars = map (('v':) . show) [ 0 .. length commas + 1 ]
105+ let args = map (('v':) . show) [ 0 .. length commas ]
117−
106+ return $ mkFunc args (\var -> E.tuple (map var args))
119− foldr
108+ parenedExpr =
121− (A.at start end (E.tuple (map (var start end) vars)))
125− do (start, expressions, end) <- located (commaSep expr)
109+ do expressions <- padded (commaSep expr)
126− return $
110+ return $ \start end ->
127− case expressions of
111+ case expressions of
128− [expression] ->
112+ [expression] ->
129− expression
113+ expression
131− A.at start end (E.tuple expressions)
115+ A.at start end (E.tuple expressions)
117+ do (start, mkExpr, end) <-
119+ [ mkBinop <$> try (parens symOp)
120+ , parens (tupleFn <|> parenedExpr)
122+ return (mkExpr start end)
134recordTerm :: IParser Source.Expr
126recordTerm :: IParser Source.Expr