@@ -86,10 +86,15 @@ parseIfThenElse = IfThenElse <$> (P.try (C.reserved "if") *> C.indented *> parse
8686 <*> (C.indented *> C.reserved "else" *> C.indented *> parseValue)
8787
8888parseBlock :: P.Parsec String ParseState Value
89−parseBlock = Block <$> (P.try (C.reserved "do") *> parseManyStatements)
89+parseBlock = Block <$> parseManyStatements
9090
9191parseManyStatements :: P.Parsec String ParseState [Statement]
92−parseManyStatements = C.indented *> C.mark (P.many (C.same *> C.mark parseStatement)) P.<?> "block"
92+parseManyStatements = (do
93+ C.lexeme $ P.char '{'
94+ C.indented
95+ sts <- C.mark (P.many (C.same *> C.mark parseStatement))
96+ C.lexeme (P.char '}')
97+ return sts) P.<?> "block"
9398
9499parseValueAtom :: P.Parsec String ParseState Value
95100parseValueAtom = C.indented *> P.choice
@@ -97,7 +102,7 @@ parseValueAtom = C.indented *> P.choice
97102 , P.try parseStringLiteral
98103 , P.try parseBooleanLiteral
99104 , parseArrayLiteral
100− , parseObjectLiteral
105+ , P.try parseObjectLiteral
101106 , parseAbs
102107 , P.try parseConstructor
103108 , P.try parseVar
@@ -143,6 +148,7 @@ parseVariableIntroduction = do
143148 name <- C.indented *> C.parseIdent
144149 C.lexeme $ C.indented *> P.char '='
145150 value <- parseValue
151+ C.indented *> C.semi
146152 return $ VariableIntroduction name value
147153
148154parseAssignment :: P.Parsec String ParseState Statement
@@ -150,21 +156,22 @@ parseAssignment = do
150156 tgt <- C.parseIdent
151157 C.lexeme $ C.indented *> P.char '='
152158 value <- parseValue
159+ C.indented *> C.semi
153160 return $ Assignment tgt value
154161
155162parseWhile :: P.Parsec String ParseState Statement
156−parseWhile = While <$> (C.reserved "while" *> C.indented *> parseValue <* C.indented <* C.colon)
157− <*> parseManyStatements
163+parseWhile = While <$> (C.reserved "while" *> C.indented *> C.parens parseValue)
164+ <*> (C.indented *> parseManyStatements)
158165
159166parseFor :: P.Parsec String ParseState Statement
160−parseFor = For <$> (C.reserved "for" *> C.indented *> C.parseIdent)
167+parseFor = For <$> (C.reserved "for" *> C.indented *> C.lexeme (P.char '(') *> C.indented *> C.parseIdent)
161168 <*> (C.indented *> C.lexeme (P.string "<-") *> parseValue)
162− <*> (C.indented *> C.reserved "until" *> parseValue <* C.indented <* C.colon)
169+ <*> (C.indented *> C.reserved "until" *> parseValue <* C.indented <* C.lexeme (P.char ')'))
163170 <*> parseManyStatements
164171
165172parseForEach :: P.Parsec String ParseState Statement
166−parseForEach = ForEach <$> (C.reserved "foreach" *> C.indented *> C.parseIdent)
167− <*> (C.indented *> C.reserved "in" *> parseValue <* C.indented <* C.colon)
173+parseForEach = ForEach <$> (C.reserved "foreach" *> C.indented *> C.lexeme (P.char '(') *> C.indented *> C.parseIdent)
174+ <*> (C.indented *> C.reserved "in" *> parseValue <* C.lexeme (P.char ')'))
168175 <*> parseManyStatements
169176
170177parseIf :: P.Parsec String ParseState Statement
@@ -172,16 +179,16 @@ parseIf = If <$> parseIfStatement
172179
173180parseIfStatement :: P.Parsec String ParseState IfStatement
174181parseIfStatement =
175− IfStatement <$> (C.reserved "if" *> C.indented *> parseValue <* C.indented <* C.colon)
182+ IfStatement <$> (C.reserved "if" *> C.indented *> C.parens parseValue)
176183 <*> parseManyStatements
177− <*> P.optionMaybe (C.same *> parseElseStatement)
184+ <*> P.optionMaybe parseElseStatement
178185
179186parseElseStatement :: P.Parsec String ParseState ElseStatement
180−parseElseStatement = C.reserved "else" >> (ElseIf <$> (C.indented *> parseIfStatement)
181− <|> Else <$> (C.indented *> C.colon *> parseManyStatements))
187+parseElseStatement = C.reserved "else" >> (ElseIf <$> parseIfStatement
188+ <|> Else <$> parseManyStatements)
182189
183190parseReturn :: P.Parsec String ParseState Statement
184−parseReturn = Return <$> (C.reserved "return" *> parseValue)
191+parseReturn = Return <$> (C.reserved "return" *> parseValue <* C.indented <* C.semi)
185192
186193parseStatement :: P.Parsec String ParseState Statement
187194parseStatement = P.choice (map P.try