@@ -97,7 +97,7 @@ parseManyStatements = (do
9797 return sts) P.<?> "block"
9898
9999parseValueAtom :: P.Parsec String ParseState Value
100−parseValueAtom = C.indented *> P.choice
100+parseValueAtom = P.choice
101101 [ P.try parseNumericLiteral
102102 , P.try parseStringLiteral
103103 , P.try parseBooleanLiteral
@@ -153,8 +153,10 @@ parseVariableIntroduction = do
153153
154154parseAssignment :: P.Parsec String ParseState Statement
155155parseAssignment = do
156− tgt <- C.parseIdent
157− C.lexeme $ C.indented *> P.char '='
156+ tgt <- P.try $ do
157+ tgt <- C.parseIdent
158+ C.lexeme $ C.indented *> P.char '='
159+ return tgt
158160 value <- parseValue
159161 C.indented *> C.semi
160162 return $ Assignment tgt value
@@ -187,18 +189,22 @@ parseElseStatement :: P.Parsec String ParseState ElseStatement
187189parseElseStatement = C.reserved "else" >> (ElseIf <$> parseIfStatement
188190 <|> Else <$> parseManyStatements)
189191
192+parseValueStatement :: P.Parsec String ParseState Statement
193+parseValueStatement = ValueStatement <$> (parseValue <* C.semi)
194+
190195parseReturn :: P.Parsec String ParseState Statement
191196parseReturn = Return <$> (C.reserved "return" *> parseValue <* C.indented <* C.semi)
192197
193198parseStatement :: P.Parsec String ParseState Statement
194−parseStatement = P.choice (map P.try
199+parseStatement = P.choice
195200 [ parseVariableIntroduction
196201 , parseAssignment
197202 , parseWhile
198203 , parseFor
199204 , parseForEach
200205 , parseIf
201− , parseReturn ]) P.<?> "statement"
206+ , parseValueStatement
207+ , parseReturn ] P.<?> "statement"
202208
203209parseStringBinder :: P.Parsec String ParseState Binder
204210parseStringBinder = StringBinder <$> C.stringLiteral